SecurityHeroblog

ノートだと思っていたらホワイトボードだった — 50が35に減った日

9月5日、私たちのサーバーに入ってきたファイル6個のうち5個は、すでに20日目になる見慣れた名前でした。ところが記録を突き合わせているうちに、こちら側の数字が間違っていることを見つけました。「これまで50か所」と書いておいた欄が昨日は35か所で、それは攻撃が減ったからではありませんでした。

学校の廊下にホワイトボードが一枚かかっているとしましょう。そこには まだ本を返却していない人の名前 が書かれています。

先週数えてみたら50人でした。今週また数えてみたら35人です。

返却したのでしょうか?

そうかもしれません。でも別の答えもあります。ホワイトボードは書ける枠が決まっています。 新しい名前を書くには一番上の名前を消さなければなりません。ノートだったら名前がずっと積み上がったでしょうが、ホワイトボードは古い名前を外へ押し出します。すると数字は人が減ったからではなく、板が押し流されて 減ります。

昨日私たちが経験したことがまさにこれです。ただし私たちは返却名簿ではなく 侵入記録 を数えていて、その板をノートだと信じて20日間記事を書いてきました。


まず、昨日入ってきたもの

事実 昨日、私たちのサーバー(ハニーポット。わざと開けておいて誰が何をするか見張るおとりサーバーです)に降りてきたファイルは6種でした。そのうち 5種は私たちが以前の記録にすでに書いておいたファイル でした。ハッシュ(ファイルの内容を短い値ひとつに要約した値。内容が一文字でも違えば値が丸ごと変わります)まで同じでした。

事実 そのうちひとつは306バイトのシェルスクリプトです。306バイトなら ショートメッセージ2行 ほどの大きさです。このファイルは8月17日に初めて記録されて以来、昨日で 20日目 に同じハッシュです。同じアドレス hxxp://185[.]93[.]89[.]72/wget から来ます。20日間 1ビットも変わっていません。

推定 攻撃する側が何も直さなかったという意味です。直す理由がなかった、という方がより正確でしょう。このファイルが20日間ずっと通用したということですから。

事実 昨日ログインに成功してコマンドを残したセッションは5件でした。そのうち3件は互いに異なる出発地なのに コマンド数31個、意図3種、完結性スコア16まで同じでした。 かかった時間も67.657秒 · 68.155秒 · 67.820秒で1秒以内の差でした。この3セッションが受け取っていったファイルも、上の306バイトスクリプト 1個 でした。

事実 残る1件(ATK-CA5936)はSSHで入ってきて 3.738秒 滞在して出ていきました。コマンドはたった1個なのに意図は5種、ファイルは2個を受け取っていきました。この形は8/19 · 8/24 · 8/25 · 8/28 · 8/30 · 9/01 · 9/03の記録と、別名 · フィンガープリント · 所要時間 · コマンド数まで同じです。昨日が8回目 です。

新しいファイルがひとつ — ところがそれも新しくなかった

事実 昨日、唯一初めて見るハッシュは dde20835… ひとつでした。1,608バイトのbashスクリプトです。ショートメッセージで言えば 10行ほど の分量です。

事実 このファイルは hxxp://5[.]182[.]210[.]174/ok から来ました。ところがこのアドレスから出てきたファイルは8/17以降 毎回きっかり1,608バイト で、毎回ハッシュは違いました。 8/25の記事で10種と数え、8/29の記事に2種がさらにあるので、昨日のものまで含めて 最低12種 です。

推定 サイズはそのままで中身だけが少しずつ変わっているという意味に読めます。ハッシュで防ぐやり方は、このアドレスの前では 一日ももちません。 12回書いておいたのに13回目がまた出てくるわけですから。

事実 ただし、なぜそうなのかは分かりません。リクエストのたびに新しく作られるのか、短い周期で入れ替えているのか区別できません。ファイルの中身を私たちが持っていないので 何が変わったのかも言えません。 8/22 · 8/23 · 8/25 · 8/27 · 8/29にも同じ項目を未解決として残し、昨日もそのままです。


そのうち私たちの名簿がおかしかった

ここからが昨日の本当の主題です。

事実 私たちのサーバーは接続してきたプログラムごとに フィンガープリント をひとつずつ残します。相手のプログラムが「私はこういうやり方で会話する」と先に知らせてくる値を一塊に要約した値です。そのフィンガープリントの横には ips_all_time という欄があります。名前のとおりに読めば 「これまでこのフィンガープリントを付けて来た出発地の数」 です。

事実 私たちはこの欄を20日間「累計」として読み、記事に書き写してきました。ところが昨日、過去の記事と突き合わせてみると 3つが過去より小さくなっていました。

フィンガープリント (バナー) 過去の記録 昨日 方向
dd9bcf09… (SSH-2.0-ZGrab) 8/21 34 → 8/22 38 → 8/23 42 → 8/31 50か所 35か所 ↓
f555226d… (SSH-2.0-libssh_0.9.6) 8/19 145 → 8/22 182 → 8/24 216 → 8/29 289か所 271か所 ↓
16443846… (SSH-2.0-Go) 8/19 24 → 8/24 28 → 8/30 27 → 9/04 19か所 20か所 ↓(8/30比)
フィンガープリント群の総数 8/24 41 → 8/29 45個 37個 ↓

事実 累計は減ることができません。昨日まで50か所が訪れたのに今日35か所になるには、訪れたこと自体が取り消されなければならないからです。

推定 つまりあの欄はノートではなく ホワイトボード だった可能性が高いです。全体を積み上げるのではなく 直近の一定期間だけを数える欄 だという意味です。古い名前は板の外へ押し出されます。

事実 ただし 確定はできません。 何日分を数えているのか、いつから数え始めたのかが、データのどこにも書かれていません。ですから私たちはこの値を今後「これまでの総計」としては使わず、「直近の観測幅」 としてのみ使います。そう読んできた過去の記事の記述は、過大・過少のどちらの方向にも間違っている可能性があります。

ところが一行だけ逆に動いた

事実 同じ表で acaa53e0…(SSH-2.0-OpenSSH_7.4)の一行だけがずっと上がり続けました。8/25 139か所 → 8/31 589か所 → 昨日 1,042か所 です。

推定 板が押し流される欄なのに上がったのなら、押し出されたものより新しく入ってきたものの方が多かったという意味です。こちらの増加は本物として読んで構いません。 逆に減った3行は「攻撃が減った」の根拠に使ってはいけません。

事実 そしてこの1位のフィンガープリントには delivered_samples(ファイルを置いていったか)の表示が false です。昨日のフィンガープリント11種のうちこの表示が付いていたのは 16443846…(SSH-2.0-Go)ひとつだけ でした。一番多くドアを叩いたツールと、実際に物を置いていったツールが違います。

事実 ここで一度立ち止まります。この値は プログラムのビルドのフィンガープリントであって、人のフィンガープリントではありません。 同じディストリビューションが標準で入れてくれるOpenSSHを使う人たちは、互いに何の関係がなくても同じ値を持ちます。ですから「同じツール」までは書いても「同じ組織」とは書きません。しかもバナー文字列は 相手が自ら送ってくる値 なのでいくらでも偽装でき、私たちにそれを検証する手段はありません。


昨日一日の全体

時間順に並べるとこうなります。「日次集計 · アーカイブ照合」と書かれた行に注目してください — 昨日一日だけ見ても見えず、過去の記事と並べて初めて見えるものです。

  1. 事実 ATK-DF93D5(171.249.x.x, テルネット) ログイン成功。67.657秒の間にコマンド31個、ダウンロード1件。intents 3種 — ファイルダウンロード · 実行権限付与 · ダウンロード後実行。completeness 16、TTY録画あり(内容は含まれない)。テルネットなのでフィンガープリント・クライアント欄は空文字列だ
  2. 事実 ATK-A2FEFA(122.8.x.x, テルネット) ログイン成功。60.894秒、コマンド17個。intents 5種 — 偵察(システム) · ファイルダウンロード · 実行権限付与 · ダウンロード後実行 · 永続化(SSH鍵の植え付け)。ただし download_count は 0 であり、この別名は389バイト公開鍵 a8460f44… の delivered_by 8か所リストにない。completeness 17
  3. 事実 ATK-C7E851(111.246.x.x, テルネット) ログイン成功。68.155秒、コマンド31個、ダウンロード1件、intents 3種、completeness 16 — 00:26 の ATK-DF93D5 とコマンド数・意図の組み合わせ・完結性が同一だ
  4. 事実 ATK-CA5936(130.12.x.x, SSH) ログイン成功。3.738秒 · コマンド1個なのに intents 5種 · ダウンロード2件(399バイトOpenSSH秘密鍵 43728fbf… と54バイトASCII 00b6f15c…)。フィンガープリント 16443846…4397 / SSH-2.0-Go。completeness 19 で昨日1位。アーカイブ 8/19·8/24·8/25·8/28·8/30·9/01·9/03 と別名・フィンガープリント・所要時間・コマンド数・意図数・ダウンロード構成がすべて同じ — 昨日が8回目の記録だ
  5. 事実 ATK-6757C8(171.249.x.x, テルネット) ログイン成功。67.820秒、コマンド31個、ダウンロード1件、intents 3種、completeness 16 — 昨日3件目の同じ形だ。この別名と 00:26 の ATK-DF93D5 はマスクされた前2オクテットが 171.249 で同じなのに別名が互いに異なる
  6. 事実 コマンド31個の形の3セッション(ATK-DF93D5 · ATK-C7E851 · ATK-6757C8)がすべて306バイトシェルスクリプト a6296a79… の delivered_by 8か所リストに入っている。つまり3セッションが受け取ったファイルは同じ1個だ
  7. 事実 昨日の downloads 6種のうち5種が過去の記録にあるハッシュだ — a6296a79…(306バイト、8/17以降20日目に同一ハッシュ・同一URL)、4af5a5c9…(9バイト、8/18·8/19)、a8460f44…(389バイト公開鍵、8/16以降)、43728fbf…(399バイト秘密鍵、8/19以降)、00b6f15c…(54バイトASCII、8/19以降)。新しいハッシュは dde20835…(1,608バイト bash)ひとつだけだ
  8. 事実 その新しいハッシュ dde20835… は hxxp://5[.]182[.]210[.]174/ok から来ており、サイズがきっかり1,608バイトだ。8/25 の記事がこの URL のハッシュを10種として集計し、8/29 の記事に2種(801cba39… · 0c058175…)がさらにある — 昨日のものを足せば最低12種であり、サイズは 8/17 の初観測以降、毎回1,608バイトで同一だ
  9. 事実 client_fingerprints の ips_all_time が過去の記録より低くなったクラスタが3個だ。dd9bcf09…(SSH-2.0-ZGrab) 8/21 34 → 8/22 38 → 8/23 42 → 8/31 50 → 昨日 35。f555226d…(SSH-2.0-libssh_0.9.6) 8/19 145 → 8/22 182 → 8/24 216 → 8/29 289 → 昨日 271。16443846…(SSH-2.0-Go) 8/19 24 → 8/24 28 → 8/30 27 → 9/04 19 → 昨日 20。clusters_total も 8/24 41 → 8/29 45 → 昨日 37 だ。一方 acaa53e0…(SSH-2.0-OpenSSH_7.4)は 8/25 139 → 8/31 589 → 昨日 1,042 と増え続けた
  10. 事実 コマンド1,715個のうち意図に分類されたものは1,028個(59.9%)。そのうち偵察 — システム770回が74.9%で圧倒的であり、実行権限付与184回はファイルダウンロード28回の6.6倍だ。ファイルダウンロード28回とダウンロード後実行28回はきっかり同じだ。永続化 — SSH鍵の植え付け10回、痕跡削除8回
  11. 事実 セッション35,373件、ユニーク出発地327か所。VNC(5900) 33,975件が全体の96.05%なのに作ったところは100か所だけだ — 1か所あたり平均339.75回。逆に RDP(3389)は接触918件なのに出発地が118か所で昨日のサービス中最多であり、1か所あたり7.78回だ
  12. 事実 top_sources 上位6か所がそれぞれ4,941~5,199イベント、合計30,390 でセンサー 02 全体セッションの85.9%だ。リスト12か所全体は31,837件(90.0%)
  13. 事実 service_breakdown 5種のセッションの合計は35,262 で、全体セッション35,373 とちょうど111 の差だ。この111 は adb_sessions の値と同じだ — ADB 接触は総計には入ったのにサービスリストにはない
  14. 事実 SMB 方言の提案180件は NT LM 0.12 · LANMAN1.0 · LM1.2X002 · LANMAN · PC NETWORK PROGRAM 1.0 · Windows for Workgroups 3.1 · LANMAN2.1 · Samba の8語彙だけで、SMB2系の提案は0件だ(9/04 には SMB 2.??? が2件あった)。VNC はバージョンが記録された33,806件のうち33,285件(98.46%)が 003.003 だ。RDP クッキー768件のうち公開スキャナ名をそのまま含んだものは nmap 3回 · zgrab 2回

ここで目に留まるのは 3番目のアーカイブ照合の行 です。残りの行がすべて「昨日も同じだった」なのに、その行だけが「昨日、私たちが間違っていた」だからです。

数字に移すとこうなります。

項目 昨日 (センサー 01) 比べるもの
セッション 1,700件 —
ユニーク出発地 439か所 1か所あたりセッション3.9件
ログイン試行 1,304回 1か所あたり平均 2.97回
コマンド 1,715個 意図が付いたものは1,028個(59.9%)
ポート 2222 (SSH) 1,334セッション 全体の78.6%
ポート 2223 (テルネット) 364セッション ところが成功セッション5件のうち 4件がこちら
TTY録画 913件 —

推定 規模を感覚で測るとこうなります。ログイン試行1,304回は一日で割ると 1分に1回のペース です。誰かが一日中ドアノブを回してみたようなものです。コマンド1,715個も 1分に1〜2個のペース です。急いでもいなければ、休んでもいない速度です。

事実 昨日サーバーの中で起きたことの分布はこうです。

意図 回数 割合
偵察 — システム 770回 分類されたものの74.9%
実行権限付与 184回 ダウンロード28回の6.6倍
ダウンロード後実行 28回 —
ファイルダウンロード 28回 上と きっかり同じ
永続化 — SSH鍵の植え付け 10回 —
痕跡削除 8回 —

事実 「ファイルダウンロード」28回と「ダウンロード後実行」28回が きっかり同じです。 ダウンロードされたものは例外なく実行段階へ進んだという意味です。

「実行権限付与」はファイルに 「これは実行してよいファイルだ」という印を付ける動作 です。Linuxではこの印がないと、プログラムであっても実行されないからです。

ドアの前に置かれたもの

防御に使えるよう値をそのまま書き写します。値をクリックするとコピーされます。 アドレスは接続されないよう変形(defang)してあるので、そのまま使ってください。そして 「20日目」・「12種」と書かれた2行を比べてみてください — ひとつは一度書けば20日もつ値であり、もうひとつは書いた途端に古びる値です。

sha256
a6296a79f44e21b76604d2d2bbf795d2cf380f70e39d45fbf166707ff3b4a6a4306バイト POSIX シェルスクリプト · センサー 01 · 別名8か所から8回 · 8/17 の初観測以降20日目に同じハッシュ
url
hxxp://185[.]93[.]89[.]72/wget上の306バイトスクリプトの配布元。20日間ファイルが1ビットも変わらなかった
sha256
dde20835fbf7c5187387e760504358634cb8c7f2abd0b06f69b11e9fdfb0ca371,608バイト Bourne-Again シェルスクリプト · 別名1か所(ATK-99DE57)から1回 · 昨日唯一アーカイブになかった新しいハッシュ
url
hxxp://5[.]182[.]210[.]174/ok上のファイルの配布元。8/25 集計10種 + 8/29 記録2種 + 昨日1種 = 最低12種の互いに異なるハッシュが毎回きっかり1,608バイトで出てきた
sha256
a8460f446be540410004b1a8db4083773fa46f7fe76fa84219c93daa1669f8f2389バイト OpenSSH RSA 公開鍵 · 互いに異なる別名8か所から8回 · 8/16 以降繰り返し記録 · 配布元は未記録
sha256
43728fbfb98bb39ff61a2db0fc2905bd6937997062b05b9ab8b186fdee18c09a399バイト OpenSSH 秘密鍵 · 別名1か所(ATK-CA5936)から1回 · 8/19·8/24·8/25·8/28·8/30·9/01·9/03 と同一ハッシュで昨日が8回目 · 配布元は未記録
sha256
00b6f15c2274420217ed3098a9f5f00545bf1793d7a324fd18a7809cbbf5b12b54バイト ASCII テキスト · 上の秘密鍵と同じ別名・同じセッション時間帯 · 8/19 以降繰り返し · 内容が記録にないため何であるかは判断しない
sha256
4af5a5c98ad132095c6fbe7b02c242153a190a01cc321e50a916a0ca46fbaa629バイト ASCII テキスト · 別名1か所(ATK-BECAD3)から8回 · 8/18·8/19 の記録と同じハッシュ · 配布元は未記録
sha256
71ecfb7bbc015b2b192c05f726468b6f08fcc804c093c718b950e688cc414af5231,196バイト · センサー 02 · 別名1か所(ATK-624002)から1回 · 低インタラクションセンサーのため、どのコマンドで入ってきたかに該当する記録がない
url
hxxp://31[.]77[.]227[.]121/bins/UPX 圧縮を解いて初めて現れた配布 URL 系12件。表面だけ見てもアドレスはひとつも見えない

事実 サイズの感覚を付けておきます。389バイトの公開鍵は ショートメッセージ2〜3行、54バイトは 短い一文、9バイトは 英語9文字 です。センサー 02の231,196バイトは上の306バイトスクリプト 750個分 です。

事実 そして昨日センサー 01が保存した6種に ELF実行バイナリは0件 でした。シェルスクリプト2種 · ASCIIテキスト2種 · 公開鍵 · 秘密鍵だけで、ファイル分類の項目に「実行ファイル」がありません。

事実 389バイトのものは SSH公開鍵 です。かんたんに言えば パスワードなしで入ってこられる合鍵 です。サーバーの authorized_keys(許可された鍵のリスト)というファイルにこの値を一行書き入れると、その鍵を持つ側はそれ以降パスワードを訊かれなくても入ってきます。昨日このファイルは互いに異なる別名 8か所 から来ました。

事実 逆に399バイトのものは 秘密鍵 です。ところがこれが攻撃者が植え付けていったものなのか、サーバーにあったものを持ち出そうとしたものなのか、データが区別してくれません。8/19に残した未解決項目が、8回目の観測である昨日もそのままです。

どんなパスワードで入ろうとしたか

事実 昨日試行されたID・パスワードの組み合わせは約955種でした。そのうち ここに載せるのは20種だけ です。残る 935種は個数だけ数えます。 全体の97.9%です。

理由はひとつです。互いに異なるIP 3か所未満でしか見られなかった組み合わせは、実際にどこかで流出した本物のアカウントである可能性があります。 そういう値は私たちの記事には書き写しません。

下の20種は反対側です。複数の場所で繰り返されていて「誰のものでもない出荷時デフォルト値」と見なせるものです。

ID パスワード 互いに異なる出発地
admin admin 21か所
root root 9か所
support support 7か所
root admin 7か所
root 123456 7か所
345gs5662d34 345gs5662d34 7か所
root xmhdipc 5か所
root password 4か所
root (空のパスワード) 4か所
admin test 4か所
root 12345 4か所
user user 4か所
guest guest 4か所
root 111111 4か所
root 123123 4か所
enable\x00 linuxshell\x00 3か所
root pass 3か所
root xc3511 3か所
admin (空のパスワード) 3か所
root vizxv 3か所

事実 admin/admin ひとつだけで互いに異なる 21か所 から来ました。rootアカウントに パスワードをまったく空にして 試行したところも4か所ありました。

攻撃者が使った手口を国際分類表に対応させると

MITRE ATT&CKは攻撃手口ごとに番号を付けておいた国際的なリストです。私たちが見た行動をその番号に合わせるとこうなります。IDを押すと原文の説明へ行きます — 私たちの言葉を信じずに直接確認してほしいのでリンクを貼ります。

  • T1110.001Brute Force: Password Guessing — ログイン試行1,304回、互いに異なる組み合わせ約955種(引用20 + 単一ソース935)推定
  • T1078.001Valid Accounts: Default Accounts — admin/admin 21か所、root/root 9か所などデフォルト値辞書で5セッションのログイン成功推定
  • T1082System Information Discovery — 偵察 — システム770回推定
  • T1105Ingress Tool Transfer — ファイルダウンロード28回、外部 URL が記録された配布元2か所推定
  • T1222.002File and Directory Permissions Modification: Linux — 実行権限付与184回推定
  • T1098.004Account Manipulation: SSH Authorized Keys — 永続化 — SSH鍵の植え付け10回、389バイト公開鍵が互いに異なる8か所から搬入推定
  • T1070Indicator Removal — 痕跡削除8回推定
  • T1046Network Service Discovery — センサー 02 で VNC·RDP·LDAP·SMB·MSSQL 5種のサービスに接触、RDP クッキーに nmap 3回推定
  • T1595Active Scanning — RDP クッキー zgrab 2回、センサー 01 の SSH-2.0-ZGrab フィンガープリント2か所·SSH-2.0-Fingerprintx-SSH2 フィンガープリント3か所。相手が自らツール名を明かした接触であり、研究・測定目的なのか攻撃準備なのかは確認不可推定

9行すべてに [推定] バッジが付いていることを見てください。私たちの手元にあるのは、コマンドの「意図の分類結果」と「何回だったか」までです。コマンドの原文はありません。分類表に合わせる作業は常に解釈であり、解釈には解釈だと書きます。


隣の建物 — センサー 02

事実 同じ日、低インタラクションのセンサー 02にはセッション 35,373件 が入ってきました。センサー 01の1,700件と比べると 21倍 です。出発地は327か所でした。

サービス ポート 接触 出発地 1か所あたり
VNC 5900 33,975件 (96.05%) 100か所 339.75回
RDP 3389 918件 118か所 7.78回
LDAP 389 155件 15か所 10.3回
SMB 445 145件 57か所 2.5回
MSSQL 1433 69件 10か所 6.9回
ADB (未記録) 111件 (未記録) —

事実 接触が最も多いドアと、出発地が最も広いドアが互いに違います。 VNCは100か所が3万4千回を作り、RDPは118か所が918回を作りました。

推定 VNC側の339.75回は一日で割ると 1か所が4分に1回ずつ、一日中 ドアノブを回した速度です。RDP側の7.78回は 一日に8回 です。同じ日に同じサーバーで、性格のまったく違う2つが同時に起きたわけです。

事実 上位6か所がそれぞれ4,941〜5,199件ずつ、合わせて30,390件を作りました。センサー 02全体の 85.9% です。リストに載った12か所まで合わせると90.0%です。

事実 ネゴシエーション段階で相手が提案したVNCバージョンは、記録された33,806件のうち33,285件(98.46%)が 003.003 でした。SMB側は方言の提案180件がすべて古い語彙で、最新系であるSMB2の提案は 0件 でした。9/04には2件あったのに昨日はありませんでした。RDPクッキー768件のうちスキャナ名をそのまま書いて送ってきたものは nmap 3回、zgrab 2回です。

事実 センサー 02は低インタラクションなので ログイン成功・コマンド・認証情報という概念自体がありません。 ここの数字は「どのドアを何回叩いたか」までであり、「入ってきて何をした」という文は作れません。


以前にこういうことがあった

推定 Miraiボットネット(2016)。 テルネットのデフォルトアカウント辞書でIoT機器に入っていくやり方です。昨日、引用基準を超えた認証情報20種に root/xc3511(3か所) · root/vizxv(3か所) · root/xmhdipc(5か所)が入っていますが、これらの組み合わせはMiraiのソースが公開された際に知られ、広く文書化された値です。昨日ログインに成功した5件のうち4件がテルネットだという点も重なります。ただし 昨日の試行がMirai系だという意味ではありません。 同じ辞書がその後さまざまな派生ツールにそのままコピーされて使われたため、言えるのは 「辞書が重なる」までです。 感染台数や被害額のような数値は書き写しません。(出典の種類: 米国US-CERT警報 TA16-288A および公開されたソースコード分析レポート)

推定 RealVNC 4.1.1 認証バイパス、CVE-2006-2369(2006)。 昨日のVNCネゴシエーションで相手が提案したバージョンは98.46%が 003.003 でした。RFB 3.3は認証方式の選択権がサーバー側にある古いバージョンで、上のCVEはその構造でクライアントが「認証なし」を押し通せた欠陥です。認証の弱い画面共有サーバーを広く探すツールが低いバージョンを先に提案する理由はあります。ただしこれはプロトコルの定義と公開CVEに依拠した背景説明です。 昨日の接触がこの脆弱性を実際に攻撃したという根拠は私たちにありません。私たちが持っているのは、ネゴシエーション段階で提示されたバージョン数値だけです。(出典の種類: CVE およびベンダーアドバイザリ)


それで何をすべきか

ホワイトボードの話に戻ります。昨日私たちが学んだのは2つです。数字はどの板に書かれたかによって意味が変わるということ、そして 板が他人の手にあれば消され得るということ です。以下の項目も結局その話です。

1. デフォルトアカウント・脆弱なパスワードをそのまま使っている · 可能性 高 上の表の20行はすべて機器やディストリビューションが出荷時に入れておく値です。admin/admin を21か所が44回、root/root を9か所が12回試行しました。空のパスワードの組み合わせもありました。そして昨日の完結性上位のセッション5つは、例外なくこの辞書でドアが開いた後に始まります。 開いた後に続いたのは偵察770回 · 実行権限付与184回 · ダウンロード28回です。

2. パスワードログインを許可し、鍵方式を使っていない · 可能性 高 一日1,304回のログイン試行が入ってきており、SSHもテルネットもパスワードを受け付ける経路です。問題はその次です。「鍵の植え付け」が10回分類され、389バイトの公開鍵が 互いに異なる8か所 から入ってきました。authorized_keys に他人の鍵が一行入ると、パスワードを変えてもその鍵で入り続けられます。 認証手段がもうひとつ増えることなので、パスワード変更もアカウントロックも役に立ちません。

3. 管理ポートをインターネットにそのまま開けておいている · 可能性 高 宣伝したこともないサーバーに一日439か所が接触しました。隣のセンサーにはRDP 118か所 · VNC 100か所 · SMB 57か所 · LDAP 15か所 · MSSQL 10か所が付きました。2つのセンサーを合わせると最大766か所です(重なりが分からないので上限です)。自ら스캐너だと名乗った接触もありました。私たちを選んで来たのではなく、アドレスをなぞっていて引っかかったのです。 VPNやジャンプホストの後ろへ移せば、この接触のほとんどは認証段階の手前で切れます。

4. 外へ出ていく接続を止めていない · 可能性 高 「ファイルダウンロード」28回と「ダウンロード後実行」28回が きっかり同じでした。 昨日、外部アドレスが記録された配布元は hxxp://185[.]93[.]89[.]72/wget と hxxp://5[.]182[.]210[.]174/ok の2か所です。ログインはすでに突破された後なので、サーバーが外へ出ていく接続を断つことが、実際の被害を防ぐ最後の地点 です。これが塞がれていたなら、昨日の4セッションはダウンロード段階ですべて切れます。

5. ログをサーバーの中だけに置いている · 可能性 中 「痕跡削除」の意図が8回分類されました。私たちがそれを見られたのは、セッション913件が サーバーの外で別途録画 されていたからです。名簿を他人の教室のホワイトボードにだけ書いておけば消されます。ログをサーバーの外へ即座に送り出す構成ひとつが、この8回を無力化します。

6. 回数ベースの遮断(fail2banなど)だけを信じている · 可能性 中 ここが面白い点です。センサー 02のVNCは1か所あたり339.75回なので、どんなルールにも確実に引っかかります。上位6か所が全体の85.9%を作ったので、接続頻度制限ひとつで切り落とされます。ところがセンサー 01は1か所あたり平均 2.97回 です。「5回間違えたらロック」のような閾値は 発動すらしません。 同じ防御が一方には通じ、一方には通じません。そして昨日実際にドアが開いた方は、閾値が通じない方でした。


私たちが分からないこと

このブログが他と違う点はここです。分からないことを分からないと書きます。昨日はそのリストの一番上が 私たち自身に関すること でした。

私たちの記録に関すること

  • [要訂正] フィンガープリント別の ips_all_time が過去の記録より低くなったクラスタが3個です(ZGrab 8/31 50 → 昨日 35、libssh 8/29 289 → 昨日 271、SSH-2.0-Go 8/30 27 → 9/04 19 → 昨日 20)。フィンガープリント群の総数も8/29 45 → 昨日 37です。永続的な累計ではなく直近の区間だけを数える値である可能性が高いですが、集計基準と開始時点がデータにないため確定できません。この値を「これまでの総計」として読んできた過去の記事の記述は訂正が必要です。
  • [確認不可] アーカイブ照合は8/16〜9/04のブリーフ20個を文字で突き合わせたものです。原材料ではなく 私たちが書いた記事 を照合したものなので、過去の記事に書かれていない値は「なかった」ではなく「確認されない」と読むべきです。

データ自体からは説明がつかないこと

  • [確認不可] hxxp://5[.]182[.]210[.]174/ok の互いに異なるハッシュがこれまで何種なのかは 下限しか 言えません。8/25 10種 + 8/29 2種 + 昨日1種で最低12種であり、アーカイブ20日分をハッシュ単位で全数照合した値ではありません。
  • [確認不可] 同じアドレス・同じ1,608バイトなのにハッシュだけが変わり続ける理由が分かりません。リクエストごとに作られるのか短い周期で入れ替えているのか区別できず、ファイルの中身を保持していないので 何が変わったのかも 言えません。8/22 · 8/23 · 8/25 · 8/27 · 8/29の同じ項目がそのままです。
  • [確認不可] 399バイトの秘密鍵が植え付けられたものなのか持ち出そうとしたものなのか、データが区別してくれません。downloads 配列にあるのにアドレス欄は空です。8/19の未解決項目が、8回目の観測である昨日もそのままです。
  • [確認不可] セッションが1,700件なのに、ポート別の合計もプロトコル別の合計もどちらも1,698です。2件がどこに属するのか 説明されません。
  • [確認不可] TTY録画が、あるところには913件、別のところには224件と書かれています。2つの値の関係が明示されていません。
  • [確認不可] コマンド1,715個のうち 687個(40.1%)はどの意図にも分類されませんでした。 それが何だったのかは原文がないので分かりません。
  • [確認不可] センサー 02のADB接触111件が総計には入ったのにサービスリストにはなく、昨日の原材料にADBの詳細項目自体がありません。センサー 02で 唯一、投入内容が残る通路 なのに、昨日はその内容を見ることができません。231,196バイトの検体がこの経路で入ってきたのか確認できません。
  • [確認不可] センサー 02で、ひとつの出発地が複数のサービスを合わせてなぞったのか計算できません。サービス別出発地の合計(300)が全体のユニーク出発地(327)より小さく、重なりを逆算できません。この値0は「なし」ではなく 「算出不可」 です。
  • [確認不可] 3356ae61…(SSH-2.0-PuTTY_Release_0.84)は昨日も当日3か所 = 累計3か所です。9/04にも同じ値で「初観測」と書きました。同じ3か所が2日連続で来たのか集計方式のせいなのか区別できません。8/21〜8/23にも同じ問題を残しました。
  • [確認不可] ATK-DF93D5とATK-6757C8はマスクされた前2オクテットが 171.249 で同じなのに別名が違います。同じ帯域の別のアドレスに見えますが、別名の作り方が文書化されていないため断定しません。 マスクされた値を復元しようとする試みはしていません。
  • [確認不可] SSHバナー文字列とRDPクッキーの値は 相手が自ら送ってくる値 なので偽造できます。私たちに検証手段がありません。

わざと載せなかったこと · 結び付けなかったこと

  • [除外] 別の経路で確保されたDiscord Webhookアドレス1件が、昨日のどのセッション・検体と結び付くのかをデータが明かしません。昨日のダウンロードのどの項目にも現れないため、昨日の事件と結び付けて書きませんでした。 Webhookトークンはそれ自体が悪用可能な値なので本文には書き写しません。8/17以降、複数の記事が同じ理由で除外してきました。
  • [除外] 背景統計として入ってきたCVE 6,622件 · CISA KEV 390件 · ランサムウェア確認98件と上位EPSSリストは、KISAのセキュリティ告知から抜いた値です。昨日のハニーポット観測と結び付く根拠がないため 事実関係には入れませんでした。
  • [確認不可] 観測した配布元・C2はC-TASへ通報しますが、確認できるのは送信が成功したというところまでです。KISAへの登載可否は別途確認が必要です。

そもそも判断しないこと

  • ASN·ISP — 関連データベースがありません。推定しません。昨日の配布元 185[.]93[.]89[.]72 · 5[.]182[.]210[.]174 · 31[.]77[.]227[.]121 のホスティング事業者も確認不可です。
  • 地理情報 — 上と同じです。IPの地理情報はそもそも帰属の根拠にもなりません。昨日接触した最大766か所の位置は確認できず、特定の国・企業・個人を攻撃者として名指ししません。
  • VPN·Tor·クラウドかどうか — 判別手段がありません。
  • 検体が悪性かどうか — VirusTotalを連携していません。昨日保存された7種(センサー 01の6種 + センサー 02の1種)のアンチウイルス検出名・検出率は確認不可です。
  • User-Agent — 2つの観測面のどちらもHTTPではありません。センサー 01はSSH·テルネット、センサー 02はSMB·RDP·VNC·MSSQL·LDAP·ADBです。
  • CVEとの結び付け — SSH·テルネット攻撃はたいていCVEを参照せず、センサー 02もネゴシエーション段階なので同様です。昨日観測されたどの接触も、特定のCVEを攻撃したと言える根拠がありません。
  • コマンド原文 · ファイル内容 · TTYリプレイ — 私たちの手元にありません。913件が録画されたという事実だけを知っており、画面に何があったのかはここでは言えません。
  • 出発地の身元 — 別名(ATK-XXXXXX)は記事と記事の間で同じ出発地を指す目印にすぎず、身元ではありません。マスクされた後ろ2桁は復元しません。

昨日私たちのサーバーに入ってきたもののうち新しいのはファイルひとつだけで、それすら12回目のリビルドでした。残ったのは20日目の同じスクリプトと、8回目の同じ3.7秒のセッションでした。

だから昨日直したのは攻撃者側ではありません。私たちの名簿でした。 50が35になったのは人が減ったからではなく板が押し流されたからで、私たちはそれを20日経って知りました。数字を書くときに どの板に書かれる数字なのか を一緒に書き留めておくことが、昨日学んだことの中で一番役に立つものです。

観測日は2026-09-05であり、センサー 01は日次集計基準です。出発地IPは後ろ2桁を隠して書いており、復元しません。配布アドレスは接続されないよう変形(defang)しました。認証情報は互いに異なるIP 3か所以上で繰り返し観測された20種のみを引用しており、3か所未満でしか見られなかった935種は個数だけ数えて値は書きませんでした。