マルウェアLODEINFOのさらなる進化
前回、前々回のブログで、日本国内の組織を狙ったマルウェアLODEINFOの機能や進化について紹介してきましたが、JPCERT/CCでは今年も引き続きLODEINFOを利用した活発な攻撃を確認しています。機能の拡張も継続して行われており、未実装だったコマンドの実装や、新たなコマンドの追加などを確認しています。
今回は、前回と同様に、LODEINFOに追加されたアップデート内容と、最近の攻撃動向について紹介します。
LODEINFOのバージョン
以前のブログで紹介したLODEINFOの最新バージョンはv0.3.6でしたが、現在の最新バージョンはv0.4.8を確認しています。図1は、JPCERT/CCで確認しているLODEINFOのバージョン推移です。
LODEINFOの感染に使用されるWord文書ファイル
LODEINFOは、以前に紹介した通り、標的型攻撃メールに添付されているWord文書、またはExcel文書のマクロを有効化することで感染に至ります。JPCERT/CCで確認している直近の事案では、文書ファイルにはパスワードが付与されており、メール本文に記載されているパスワードを用いて展開するように誘導されます。パスワードで展開した後のWord文書は図2のような外観となっており、マクロを有効化するように誘導する文章が書かれています。
また、本文は一見何も書かれていないように見えますが、実際には白文字にフォントサイズを小さくすることで隠蔽されており、マクロの中で利用される設定値や、LODEINFOが格納されたZIPファイルのBASE64エンコード文字列などが記載されています。
また、マクロからLODEINFOを実行する際には、LOLBASと呼ばれる手法が用いられており、以下のようなコマンドを使って、作成したファイルを実行するように変更されています。
rundll32.exe advpack.dll,RegisterOCX <実行ファイルのパス>
また、文書ファイルに含まれるマクロのコードには、日韓関係や北朝鮮に関する公開記事の文章がコメントとして記載されるようになっています。
新規コマンドの追加
現時点でのLODEINFOの最新バージョン(v0.4.8)では、前回のv0.3.6の検体から以下のコマンドが追加されています。(各コマンドの詳細についてはAppendix Aをご覧ください)
- ransom(実装)
- keylog(実装)
- mv
- cp
- mkdir
- ps
- pkill
以降では、v0.3.6から新たに追加された、主な機能について紹介します。
ランサムウェア機能
以前に紹介したv0.3.6では、ransomコマンドが搭載されていたものの、未実装でした。しかし、v0.3.8からファイルの暗号化機能が実装されていることを確認しています。暗号化には、AESとRSAを組み合わせた方式が用いられており、ファイルごとに生成したAESキーを用いてファイルが暗号化されます。その後、あらかじめ検体内に埋め込まれているRSAの公開鍵を用いてAESキーを暗号化し、"WOW! THIS FILE HAS BEEN ENCRYPTED..."
といった特徴的な文字列と一緒に、ファイルの先頭に書き込まれます。
上記の処理により、暗号化されたファイルの復号は難しくなります。また、ransomコマンドでは暗号化する対象のファイル、フォルダーを選択できますが、図7の拡張子やパスが含まれる場合は暗号化対象外になります。
ただし、暗号化対象としてフォルダーが選択された場合、フォルダーのパスについてはチェックされますが、フォルダーの中に格納されているファイルはチェックされないため、図7に含まれる拡張子のファイルであっても暗号化が行われます。 なお、ランサムウェアでよく見られる、ファイルの拡張子変更や脅迫文の作成、背景画像の変更などは行われません。当該機能が使用された事例はまだ確認していませんが、痕跡の削除やデータの外部持ち出しなどで利用される可能性が考えられます。
キーログ機能
v0.3.6では、ransomコマンドと同様にkeylogコマンドも未実装でした。しかし、v0.4.6時点では実装されていることを確認しています。キーログ機能では、以下のレジストリの値を確認し、オプションが有効になっているかどうかの確認が行われます。
オプションが有効だった場合、%TEMP%フォルダーに、<NetBIOS名>.tmp
ファイルが作成され、窃取したキー入力の内容をエンコードしてファイルに書き込みます。エンコード処理では1byteのXORが用いられており、端末のNetBIOS名をSHA512で計算した値の先頭1byteがキーとして用いられます。以下は、ログファイルをデコードするコードの例です。
import os import hashlib name = os.getenv("COMPUTERNAME") keylog_file = os.getenv("TEMP") + "//" + name + ".tmp" hash_of_name = hashlib.sha512(name.encode("UTF-8")).hexdigest() xor_key = int(hash_of_name[0:2], 16) decode_data = bytes() with open(keylog_file, "rb") as f: for ch in f.read(): decode_data += (ch ^ xor_key).to_bytes(1, byteorder="big", signed=False) print(decode_data.decode('shift_jis'))
また、本機能の特徴的な点として、以下のように感染端末のキーボードレイアウトが日本語キーボードかどうかチェックを行います。
HKLM\SYSTEM\CurrentControlSet\Service\i8042prt\ParametersのOverrideKeyboardIdentifier
の値がPCAT_106KEY
かどうかGetKeyboardLayout
関数の戻り値が1041
かどうか
もし日本語キーボードだった場合は、キーボード配列に対応した文字の変換が行われます。このことからも、LODEINFOを使用する攻撃者は日本を標的にしていることがうかがえます。
おわりに
マルウェアLODEINFOを利用した攻撃は現在も頻繁に行われており、大きな脅威となっています。 今後も継続して攻撃が続く可能性がありますので、引き続き注意が必要です。
なお、今回解説した検体のハッシュ値をAppendix B、新たに確認した通信先をAppendix Cに記載しています。 Appendix Cの通信先に対して通信が発生していないかをご確認ください。
インシデントレスポンスグループ 喜野 孝太
Appendix A 追加コマンド一覧
値 |
内容 |
---|---|
ransom | ファイル暗号化 |
keylog | キーロガーの制御 |
mv | ファイルの移動 |
cp | ファイルのコピー |
mkdir | ディレクトリの作成 |
ps | プロセス一覧の表示 |
pkill | プロセス停止 |
Appendix B 検体のSHA-256ハッシュ値
- 3fda6fd600b4892bda1d28c1835811a139615db41c99a37747954dcccaebff6e (v0.4.6)
Appendix C 通信先
- www.evonzae.com
- 45.76.216.40
- 103.140.45.71
- 139.180.192.19
- 167.179.84.162
- 167.179.65.11