urlscan.ioとShodanでお手軽にマルウェアの通信先サーバを調べる
2023年02月21日 火曜日
CONTENTS
はじめに
こんにちは、セキュリティ本部の森下です。
普段は情報分析基盤でセキュリティログの分析を行う傍ら、感染活動の動向を把握するためにマイニングマルウェアやIoTマルウェアを調べたりしています。
一般的にマルウェアに感染すると、C2サーバに通信して攻撃の指令を受けたり、マルウェア配布サーバからさらに別のマルウェアをダウンロードしてきたりします。
セキュリティ製品などによる検知を回避するために、マルウェアの通信先サーバは短期間で変わっていくことが多く、追跡し続けることが必要です。
マルウェアの通信先サーバでは、一般的なサーバとは異なる特徴が表れることがあり、その特徴を把握することで、新しく使われるサーバを迅速に発見できる可能性があります。
サーバの特徴を調査する方法として、直接アクセスして調査する方法が考えられますが、直接サーバにアクセスしてしまうと、調査を行う送信元IPアドレスなどの情報が攻撃者に把握されて調査を妨害されたり、意図せずマルウェアに感染してしまう恐れがあります。
そこで、URLやIPアドレスに対してスキャンを行うスキャンサービスを活用することで、比較的安全にサーバを調査できます。
また、スキャンサービス側でサーバから取得する情報を決めているため、調査に慣れていない人でも、スキャンサービスのスキャン結果を確認することで、お手軽に基本的な調査をすることができます。
この記事では、実在のマイニングマルウェアKinsingを例に、スキャンサービスのurlscan.ioとShodanを活用してマルウェアの通信先サーバを調べる方法について紹介します。
注意事項
直接アクセスしなければマルウェアの通信先サーバにはアクセス履歴は残りませんが、スキャンサービス側には検索した情報の記録は残ります。
スキャンサービスによっては有料会員が、他のユーザが投稿したURLやそのスキャン結果(Webページの内容など)を確認できることもあります。
そのため、URLやWebページ内に機密情報が含まれる場合はスキャンサービスに投稿しないようにしてください。
また、スキャンサービスのページ内に、スキャン対象のサーバへ直接アクセスするリンクやボタンが含まれている場合があるため、意図せずクリックしないよう注意が必要です。
マイニングマルウェアKinsing
IIJのSOCでは、近年マイニングマルウェアによる感染活動を多く観測しており、セキュリティ情報を発信するブログwizSafe Security Signalの記事「Redis・Docker APIを狙うマルウェアの調査とスキャンの観測」でも紹介しています。
今回は、類似のマイニングマルウェアKinsingのマルウェア配布サーバを例に調査方法を紹介します。
Kinsingは主にLinuxのホストを標的とするマルウェアで、感染するとホスト上でマイニングが行われたり、外部に感染拡大を試みます。
以下にSOCで観測した、Kinsingの感染活動の一例を紹介します。
1. wb.xmlをダウンロードさせる通信
この例では、標的のホストに対してOracle WebLogic Serverの脆弱性(CVE-2020-14883)を突いて、95.142.39.xxx/wb.xml
をダウンロードさせようとしています。
2. wb.shをダウンロードさせる通信
下図にwb.xmlの内容を示します。
wb.xmlからさらに、95.142.39.xxx/wb.sh
のダウンロードを試みます。
3. kinsingをダウンロードさせる通信
下図にwb.shの内容(一部)を示します。
wb.shが実行されると、ELF形式のマルウェア本体(95.142.39.xxx/kinsing
)のダウンロードを試みます。
いずれもIPアドレス直打ちで、マルウェア配布サーバのHTTPサービスからマルウェアをダウンロードすることが分かるかと思います。
今回は2022年9月にVirusTotalからKinsingのシェルスクリプトを入手して、そこからマルウェア配布サーバのIPアドレス(195.2.84.xxx
)を入手しました。
以降の調査では、入手したIPアドレスについて、スキャンサービスで調査していきます。
(マルウェアの通信先のIPアドレスを入手する他の方法として、セキュリティベンダが発行しているレポートから入手する方法なども考えられます。)
urlscan.ioでマルウェア配布サーバの特徴を調べる
ここではurlscan.ioを使ってKinsingのマルウェア配布サーバのHTTPサービスを調査します。
urlscan.ioはユーザが入力したURLに対して、代理でアクセスを行い、そのスキャン結果を公開しているサービスです。
スキャン結果にはURL、スクリーンショット、スキャン時の通信内容などの情報が含まれています。
スキャン結果の公開範囲は、以下の3つのVisibility Levelsによって異なります。
- Public: スキャン結果がSearchのページに表示される
- Unlisted: スキャン結果がSearchのページには表示されないが、urlscan Proのユーザには表示される
- Private: スキャン結果が自分だけに表示される
Searchのページでは、過去に他のユーザによってスキャンされた結果を検索することができます。
デフォルト設定では、Visibility LevelsがPublicに設定されており、スキャン結果が他のユーザにも公開されてしまうため、URLやWebページ内に機密情報が含まれていないかなど注意が必要です。
urlscan.ioのトップページから上部の「Search」ボタンをクリックすることでも、Searchのページにアクセスできます。
このページで、Kinsingのマルウェア配布サーバのIPアドレス(195.2.84.xxx
)を入力します。
検索結果の中には、検体取得先(195.2.84.xxx/kinsing
、195.2.84.xxx/ex.sh
)のスキャン結果が含まれていました。
これらのスキャン結果では検体のハッシュ値などの情報は確認できますが、検体はいずれ更新される可能性があります。
マルウェア配布サーバ自体の汎用的な特徴を見つけるために、今回はトップページのスキャン結果に着目しました。
以降ではトップページのスキャン結果を例に、urlscan.ioがスキャンで取得している情報の一部を見ていきます。
スクリーンショット
urlscan.ioでは、スキャンしたサーバからの応答をスクリーンショットとして保存しており、スキャン結果のページから確認できます。
マルウェア配布サーバのスクリーンショットを見ると、「Apache2 Debian Default Page」と書かれたページがトップページに使われていることが分かりました。
DOM
スクリーンショットではApache2 Debianにより生成された正規なデフォルトページのように見えても、ソースコードに悪性なコードが含まれている場合があります。
urlscan.ioではDOM(Document Object Model)の情報を取得しており、悪性なコードがDOMから確認できる場合があります。
DOMは「DOM」ボタンをクリックすることで内容を確認できます。
今回のマルウェア配布サーバのDOMでは悪性なコードは確認できず、正規のデフォルトページが使われているようでした。
通信内容
urlscan.ioではスキャン時の通信内容を記録しており、矢印マークのボタンをクリックすることで通信内容を確認できます。
通信内容から、195.2.84.xxx/
と195.2.84.xxx/icons/openlogo-75.png
の2つの通信が発生していました。
通信の詳細を調べるために、虫眼鏡ボタンと「Show headers」ボタンを順番にクリックすると、通信のリクエストヘッダとレスポンスヘッダを確認できます。
1つ目の通信のレスポンスヘッダの値から、Kinsingのマルウェア配布サーバのサーバヘッダは「nginx/1.18.0」が設定されていました。
先ほどのスクリーンショットに示されていた「Apache2 Debian」とサーバソフトウェアが一致しないことが分かるかと思います。
2つ目の通信は赤字で表示されており、/icons/openlogo-75.png
を取得する通信が失敗していた可能性があります。
原因を探るために、「Behaviour」ボタンをクリックすると、/icons/openlogo-75.png
の通信は404 (Not Found)でlogoファイルの取得に失敗していることが分かりました。
ここまでの調査で、マルウェア配布サーバのHTTPサービスで以下の特徴を確認できました。
- Apache2 Debianのデフォルトページが設定されているのに対し、サーバヘッダはnginxが設定されている
- logoファイルの取得に失敗する(マルウェア配布サーバにlogoファイルが配置されていない可能性がある)
確認できたHTTPサービスの特徴は、一般的なサーバでも発生し得る特徴であるため、マルウェア配布サーバを特定するには不十分である可能性があります。
他の特徴を見つけるために、別のスキャンサービスを使って追加調査をしていきます。
Shodanでマルウェア配布サーバの特徴を調べる
ここではShodanを使ってKinsingのマルウェア配布サーバで開いているポートとそのレスポンスを調査します。
Shodanはインターネットに公開されているあらゆるサーバに対して、ポートスキャンを行い、その結果を公開しているサービスです。
urlscan.ioではユーザが投稿したURLに対して、投稿したタイミングでスキャンを行いますが、Shodanでは基本的に既定の周期でIPv4アドレス空間にスキャンを行います。
(契約しているAPIのScan Creditsを消費して、ユーザが任意のタイミングでスキャンできる機能「On-Demand Scanning」もありますが、今回の調査ではこの機能は使用していません。)
Shodanの検索フォームに調査対象のIPアドレスを検索することで、スキャン結果を確認できます。
今回はマルウェア配布サーバのIPアドレス(195.2.84.xxx
)のスキャン結果を例に、Shodanがスキャンで取得している情報の一部を見ていきます。
開放ポート
スキャン結果の「Open Ports」から、対象のIPアドレスでどのポートが開いているのか確認できます。
今回のマルウェア配布サーバでは22/TCP、80/TCP、9998/TCP、9999/TCPの4つのポートが開いていることが分かりました。
サービス特定
Shodanではポート毎に、そのポートで動いているサービスからのレスポンス内容を記載しています。
このレスポンスから使用しているサービスが特定できた場合は、その情報を記載しています。
80/TCPの結果を確認すると、urlscan.ioの調査結果と同じように、サーバヘッダが「nginx/1.18.0」であることを確認できます。
この情報をもとに、赤枠で囲っている「nginx 1.18.0」とサービス特定をしていると思われます。
(サーバの応答は偽装することができるため、サービスが特定されているからといって必ずしもそのサービスが動いているとは限りません。)
ハッシュ値
Shodanではレスポンスのハッシュ値をMurmurHash3で算出して記載しており、同じレスポンスを返すサーバを探すのに有用です。
上記の80/TCPの場合は、青字で書かれている「-567627901」がMurmurHash3で算出されたハッシュ値で、Apache2 Debianのデフォルトページのハッシュ値と一致します。
このボタンをクリックすると、同じハッシュ値のサーバを検索し、その検索結果を表示します。
今回の場合はApache2 Debianのデフォルトページが設定されているサーバの一覧が出てきます。
レスポンス
今回のKinsingのマルウェア配布サーバでは、普段あまり耳にしない9998/TCPと9999/TCPのポートが開いていました。
9998/TCPと9999/TCPのレスポンスの内容を見ると、シェルスクリプトらしき文字列が確認できました。
(9998/TCPはレスポンスの一部のみを掲載しています)
9998/TCPと9999/TCPはLog4jを標的とした攻撃で使われることがあるポートであり、Palo Alto Networks社のレポートではKinsingはLog4jの脆弱性を悪用することが報告されています。
このことから、サーバの9998/TCPと9999/TCPがマルウェアの配布に使用され、Shodanのスキャンによってサーバに配置されていたシェルスクリプトの内容が見えた可能性があります。
通常このようなポートが外部に公開されていることは珍しく、さらにシェルスクリプトの内容が見えていることは一般的なサーバでは起こりにくいと考えられます。
そのため、この特徴をもとに、Kinsingが新たに使用するマルウェア配布サーバの特定に活かすことができます。
Shodanで未知のマルウェア配布サーバを見つける
ここまでで発見できた特徴をもとに、2023年2月時点で使用されているマルウェア配布サーバを見つけていきます。
9998/TCPと9999/TCPのシェルスクリプトには、マルウェア配布サーバのIPアドレスが記載されています。
そのため、シェルスクリプトの内容はサーバ毎に異なり、ハッシュ値では別のサーバを特定することができません。
ここではシェルスクリプト内に含まれる変数LDRの文字列に着目して、検索クエリ「port:9999 'LDR="wget'
」を作成し、Shodanで検索を行いました。
(参考:Search Query Examples、Filter Reference)
検索結果から、ここまで調査してきたIPアドレス(195.2.84.xxx
)とは異なるIPアドレス(194.40.243.xxx
)を特定できていることが分かるかと思います。
このIPアドレス(194.40.243.xxx
)が2023年2月時点でマルウェア配布サーバとして使われている可能性があります。
これまでの調査では以下の流れで、最終的に未知のマルウェア配布サーバを見つけることができました。
同じような流れを踏むことで、他のマルウェアの調査にも活かせると思います。
- マルウェア配布サーバのIPアドレスを入手
- urlscan.ioとShodanでマルウェア配布サーバの特徴を調査
- 得られた特徴をもとにShodanで検索
- 未知のマルウェア配布サーバを特定
おわりに
今回はスキャンサービスのurlscan.ioとShodanを活用してマイニングマルウェアKinsingのマルウェア配布サーバを調査してきました。
いずれのサービスもサーバのIPアドレスを入力するだけで多くの情報を得ることができ、簡単にマルウェアの通信先サーバの調査に活用できることが分かっていただけたかと思います。
今回紹介したスキャンサービスはマルウェアの通信先サーバの調査以外の用途にも使える可能性があるので、是非色々活用してみてください。
また、IIJのSOCでは、セキュリティに関する情報をwizSafe Security Signalで発信していますので、あわせてご確認ください。