SecurityHeroblog

実行ファイル9セット、コマンドは3行 — 33秒のものが2回

9月8日、23日分の記録になかったアドレス一つが、CPUの種類だけが違う実行ファイル9個を一度に送り込みました。それを受け取っていった侵入はコマンドをちょうど3行だけ打ち、33.25秒で終わりました。そして1分12秒後、33.26秒のものがもう一度入ってきました。

壁に棚を一つ取り付けようと工具箱を開けてみたことがあるでしょう。ネジの頭がプラスだと思ってプラスドライバーを取り出したのに、いざ見てみるとマイナスです。あるものは六角で、あるものは星形です。

だから工具をよく使う人は ドライバーを一本だけ持って行きません。 頭の形ごとにビットを十本ほど収めたセットを丸ごと持って行きます。どんなネジが打ち込まれているかを前もって知る必要がなくなるからです。一つでも合えばネジは回ります。

昨日わたしたちのサーバーに上がってきたのが、まさにそのセットでした。9個入りのものでした。

昨日の午後4時45分に起きたこと

事実 わたしたちはハニーポットサーバーを運用しています。ハニーポットとは、わざと隙を作って開けておき、誰が何をするのかを見守るおとりサーバーです。ですからここで起きたことは、実際の被害ではなく観察記録です。

事実 9月8日午後4時45分31秒、telnetで誰かが入ってきてログインに成功しました。telnetは非常に古いリモート接続方式ですが、やり取りされる文字が暗号化されずそのまま流れるという問題があります。入ってきた側には ATK-2872E4(94.154.x.x)という別名を付けました。別名は身元ではありません。記事と記事のあいだで、同じマスキング処理された発信元を続けて呼ぶために付けた目印にすぎません。この別名は、わたしたちのアーカイブの8月16日〜9月7日のどこにも なかった新しい別名です。

事実 このセッションは 33.25秒 続きました。そのあいだに攻撃者が打ったコマンドは 3個、ダウンロードしたファイルは 10個です。33.25秒で10個なら 3.3秒に1個の割合です。昨日観測されたセッションのうち、記録がもっとも緻密でした(完結性41 — 昨日の最高値)。

時間順に並べるとこうなります。秒単位と、セッションとセッションのあいだの間隔に注目してください。

  1. 事実 ATK-640E4E(59.126.x.x)がtelnetで接続しログイン成功。67.06秒のあいだにコマンド31個、ダウンロード1件。意図はファイルダウンロード・実行権限の付与・ダウンロード後の実行の3つで、画面が録画された
  2. 事実 ATK-245F71(59.125.x.x)がtelnetで接続しログイン成功。67.24秒、コマンド31個、ダウンロード1件、意図の3つが前のセッションと完全に同一だ。両方の別名とも hxxp://185[.]93[.]89[.]72/wget の306バイトのシェルスクリプトを配達した8か所の名簿に入っている
  3. 推定 異なる二つの発信元が13分間隔で入ってきて「67秒ほど・コマンド31個・ダウンロード1件」という同じ形を残した。この形は8/20のブリーフ(4か所がコマンド数まで31個で同一)と9/02のブリーフ(5か所が67秒ほど・コマンド31個)にもある — 同じ自動化ツールが動いているという意味だ
  4. 事実 ATK-50016C(220.135.x.x)がtelnetで接続しログイン成功。23.76秒、コマンド20個、ダウンロード11件。ところが意図のリストは空だ。受け取っていった11件はすべて1バイトの空ファイルだ
  5. 事実 ATK-2872E4(94.154.x.x)がtelnetで接続しログイン成功。33.25秒のあいだにコマンドはわずか3個なのにダウンロードは10件。意図の3段階がすべて付き、画面が録画された。完結性41で本日の最高値
  6. 事実 セッションが終わり、ちょうど72.01秒後に同じ別名が再び入ってきた
  7. 事実 二度目のセッション。33.26秒、コマンド3個、ダウンロード10件、意図は同一、完結性41。最初のセッションとの継続時間の差は0.01秒だ
  8. 推定 コマンド3個でファイル10個が入ってきたということは、人が一行ずつ打ったのではなく、受け取っておいたスクリプトが残りを代わりにやったという意味だ。実際にこの別名が配達した検体には、1,875バイトのシェルスクリプト(hxxp://94[.]154[.]43[.]221/cat.sh)が1件入っている
  9. 事実 cat.sh を除いた残り9件はすべてELF実行ファイルで、名前が iran.x86_64 · iran.aarch64 · iran.m68k · iran.mips · iran.mipsel · iran.powerpc · iran.sparc · iran.sh4 · iran.arc だ。各検体が観測された回数はいずれも2 — セッション1回につき1セットずつ、2回来た。10種 × 2回 = 20件が、二つのセッションのダウンロード 10 + 10 とぴたり合う
  10. 推定 x86_64 と aarch64 だけが64ビットサーバー・最新機器の系列で、残りの七つ(m68k · MIPSビッグエンディアン · MIPSリトルエンディアン · PowerPC · SPARC · ルネサスSH · Synopsys ARC)はルーター・NVR・セットトップボックス・産業用コントローラーのような組み込み機器側のCPUだ。サーバー1種類を狙ったのではなく「Linuxが動くものなら何でも」を狙った配布セットだ
  11. 事実 9種のうち8種は静的リンク・シンボル除去の状態なのに、iran.sparc だけが動的リンク(インタプリタ /lib/ld-uClibc.so.0)で、サイズも43,832バイトと一つだけ4〜5分の1の水準だ。残りは142,140〜211,648バイトの区間に集まっている。9種の合計は1,464,352バイトだ
  12. 推定 マスキング処理された発信元 94.154.x.x と配布元 94[.]154[.]43[.]221 は前の二つの区切りが同じだ。後ろの二つは伏せられており、わたしたちはそれを復元しない — したがって「同じ機器」なのか「同じ帯域」なのかすら確定できない。9/07のブリーフの 131.123.x.x ↔ 131[.]123[.]40[.]104 と同じ形が二日で再び現れた
  13. 事実 セッション1,824件 · ユニーク発信元175か所 · ログイン試行1,523回 · コマンド1,980個 · 画面録画1,390件。意図は偵察1,281 · 実行権限の付与179 · ダウンロード後の実行34 · ファイルダウンロード34 · 痕跡の削除26 · SSH鍵の設置19 だ。「ファイルダウンロード」と「ダウンロード後の実行」が34でぴたり同じだ
  14. 事実 接触67,401件 · ユニーク発信元675か所。このうち65,322件(96.9%)が画面共有(VNC)ポート5900の一つだ。9/06のブリーフが「観測12日中の最高値」と記録した48,605件を、二日で再び超えた

事実 ここで見るべき行は下の二つです。33.25秒と33.26秒。 同じ別名が1分12秒の間隔で二度入ってきたのに、留まった時間の差が 0.01秒 です。人が二度タイプしてこうなるのは難しい。

受け取っていった10個

事実 受け取っていったファイル10個は、すべて同じアドレスから来ました。hxxp://94[.]154[.]43[.]221/ です。アドレスをこんなふうに変な形で書くのは誤字ではありません。誤ってクリックして接続してしまうことがないように、http を hxxp に、ドットを [.] に変えておく慣行です。デファング(defang)、牙を抜いておくという意味です。

事実 このアドレスは、わたしたちのアーカイブ23日分に 一度もなかったものです。iran.<CPU名> というファイル名の規則も初めて見ます。

事実 10個のうち一つは実行ファイルではなく、文字で書かれたスクリプトです。cat.sh、1,875バイトです。テキストメッセージ12行ほどの大きさですね。残りの9個はすべてELF実行ファイルです。ELFは Linuxでプログラムファイルが使う規格の名前です。

推定 コマンドは3行なのにファイルは10個でした。3行で10回ダウンロードするのは難しい。最初の行で受け取ってきたあのスクリプトが、残りを代わりに受け取ってきたと見ています。 工具箱のたとえに移すと、手でビットを一つずつ差し替えたのではなく、ビットを自動で付け替える電動ドライバーを先に取り出したようなものです。

なぜ9セットだったのか

事実 9個の名前はこうです。iran.x86_64 · iran.aarch64 · iran.m68k · iran.mips · iran.mipsel · iran.powerpc · iran.sparc · iran.sh4 · iran.arc。ドットの後ろに付いている語は、すべて CPUの種類の名前です。

事実 コンピュータの頭脳であるCPUは、種類ごとに理解できる言葉が違います。一方向けに作ったプログラムをもう一方に入れると、そもそも起動もできずに止まります。ネジの頭がプラスなのにマイナスドライバーを当てるのと同じです。

推定 だから作った側は、同じプログラムをCPUの種類ごとに9セット用意しました。そのうちサーバーや最新機器によくあるのは x86_64 と aarch64 の二つだけです。残りの七つ(m68k · MIPS 2セット · PowerPC · SPARC · ルネサスSH · Synopsys ARC)は、ルーター・防犯カメラのレコーダー・セットトップボックス・産業用コントローラーのようなものに入るCPUです。とくにARCはサーバーには使われない、組み込み専用のチップです。

推定 サーバー1種類を狙ったセットではありません。「Linuxが動くものなら何でも」を狙ったセットです。どの家のネジがどんな頭なのかを尋ねなかったという意味であり、尋ねるつもりもなかったという意味です。

事実 一日に観測されたCPUの種類9つは、わたしたちのアーカイブで確認できる範囲の 最大値です。従来の最大は8月23〜25日に見た5種(armv5l · armv6l · armv7l · mips · mipsel)で、すぐ前日の9月7日は2種(MIPSビッグエンディアン・リトルエンディアン)でした。五つから九つに増えた日です。

事実 9個をすべて足すと1,464,352バイト、約1.4メガバイトです。スマートフォンの写真1枚ほどですね。その1枚分が、二度に分けて20件として入ってきました。

一つだけ違った

事実 9個のうち8個は作りがまったく同じです。静的リンクであり、シンボルが取り除かれています。静的リンクとは、プログラムが使う部品をすべて中に入れて丸ごと作るという意味です。他人の家に行っても部品を借りる必要がないので、よく動きます。シンボルを取り除いたというのは、作った人が付けておいた内部の目印を配布前に外したという意味です。分解して調べるのが難しくなります。

事実 ところが iran.sparc 一つだけが違います。これは 動的リンクです。部品を中に入れず、入り込んだ機械から借りて使うという意味です(借りてくる先として /lib/ld-uClibc.so.0 が記されています)。サイズも43,832バイトと、一つだけ4〜5分の1です。残りの8個は142,140〜211,648バイトのあいだに集まっています。

推定 ビット9本のセットなのに、一つだけ材質が違うようなものです。作るツールがその一つだけ違ったのか、丸ごと作るのに失敗して部品を借りる方に切り替えたのかもしれません。どちらなのかは、わたしたちのデータでは分かりません。

72秒後、もう一度

事実 最初のセッションは午後4時46分4秒に終わりました。そして ちょうど72.01秒後の4時47分16秒に、同じ別名が再び入ってきました。二度目のセッションは33.26秒、コマンド3個、ダウンロード10件。最初と同じです。

事実 検体9種の観測回数がすべて 2回 であることも、ここで辻褄が合います。10種 × 2回 = 20件であり、二つのセッションのダウンロード10件 + 10件とぴたり同じです。同じセットを二度、丸ごと置いていったわけです。

推定 人が二度来たと見るのは難しい。人は二度目にはもっと速いか、もっと遅い。0.01秒の差は、人の手が作る数字ではありません。

前の二つの区切りが同じだった

事実 入ってきた側のIPは 94.154.x.x です。後ろの二つの区切りは伏せてあり、わたしたちはこれを復元しません。そしてファイルが下りてきたアドレスは 94[.]154[.]43[.]221 です。前の二つの区切りが同じです。

推定 言えるのはここまでです。後ろの二つが伏せられているので、同じコンピュータなのか、同じ界隈の別のコンピュータなのか判定できません。 伏せたものを戻して照合してはいませんし、同じ機器だと書いてもいません。ただ、この形は9月7日にもありました。その日は 131.123.x.x が入ってきて 131[.]123[.]40[.]104 からファイルを受け取っていきました。二日で同じ形が再び現れたというところまでが事実です。

昨日ドアの前に置かれたもの

事実 防御に使えるよう、値をそのまま書き写します。値をクリックするとコピーされます。 アドレスは接続されないように変形してありますので、そのまま使ってください。上の10行と下の行を見比べてみてください — 上は昨日はじめて出てきた値で、下は3週間以上変わっていない値です。

sha256
4de34e22fec36167a9fabbe29b8eb38482ad5d16e59bce2fdd735b7ac15a0a861,875バイトのPOSIXシェルスクリプト · 本日2回 · 出所1か所 · アーカイブ23日分になかった新規ハッシュ
url
hxxp://94[.]154[.]43[.]221/cat.sh上のスクリプトの配布元。アーカイブ23日分になかった新規アドレスだ
sha256
de1de068b151fa14fdf94ba39d0503f0ee10a05fe0f9146c43928a96db25e084iran.x86_64 · 164,272バイト ELF 64-bit LSB x86-64 · 静的リンク · シンボル除去 · 本日2回 · 新規ハッシュ
sha256
e102ee5bbf9282a4c5f5b38c5554668eefc67a9782004631d1aa837e18dfe159iran.aarch64 · 194,552バイト ELF 64-bit LSB ARM aarch64 · 静的リンク · シンボル除去 · 本日2回 · 新規ハッシュ
sha256
b77142d8fa79f421c402fae649e041589c6e3584e69def5789b704af6b522535iran.m68k · 182,244バイト ELF 32-bit MSB Motorola m68k 68020 · 静的リンク · シンボル除去 · 本日2回 · 新規ハッシュ
sha256
dea6d274c1c7c34d160bd12c87a27ef5c5edb1f4934c4557bb54f1857c7be360iran.mips · 209,376バイト ELF 32-bit MSB(ビッグエンディアン) MIPS MIPS-I · 静的リンク · シンボル除去 · 本日2回 · 新規ハッシュ
sha256
abc54ab37e423461c6a67b7d65f342451e42fbd93e4ba83fd571c3236cfcfc25iran.mipsel · 211,648バイト ELF 32-bit LSB(リトルエンディアン) MIPS MIPS-I · 本日の9種のうち最大サイズ · 上の iran.mips と2,272バイトの差なので同じプログラムのエンディアン2セットと見られる · 本日2回 · 新規ハッシュ
sha256
7b46bce6515f1189593f7fbd7edb24ce2e152e0fbb6b57808515db882b331060iran.powerpc · 158,956バイト ELF 32-bit MSB PowerPC or cisco 4500 · 静的リンク · シンボル除去 · 本日2回 · 新規ハッシュ
sha256
60bd242f448228391063d6a1521233087ba3602f5521f526a784d6325ffe8377iran.sparc · 43,832バイト ELF 32-bit MSB SPARC · 9種のうち唯一の動的リンク(インタプリタ /lib/ld-uClibc.so.0)で、サイズも一つだけ4〜5分の1 · 本日2回 · 新規ハッシュ
sha256
b610ed02b56e1634c71f36076e61e7bf69aca774e745df6c698d5d9f470d48b8iran.sh4 · 142,140バイト ELF 32-bit LSB ルネサスSH · 静的リンク · シンボル除去 · 本日2回 · 新規ハッシュ
sha256
b5099a274a6192b76e132488df1a051b2e6ccb68fc916901ddf73ef9d0f01fe2iran.arc · 157,332バイト ELF 32-bit LSB Synopsys ARCompact ARC700 · ARC はサーバーには使われない組み込み専用コアだ · 本日2回 · 新規ハッシュ
url
hxxp://94[.]154[.]43[.]221/上の実行ファイル9種と cat.sh がすべてこのアドレスの下から来た。ファイル名の規則は iran.<CPU種類> だ
sha256
a6296a79f44e21b76604d2d2bbf795d2cf380f70e39d45fbf166707ff3b4a6a4306バイトのPOSIXシェルスクリプト · 本日8回 · 異なる8か所が配達 · 8/17の初観測以降、本日で23日目の同じハッシュだ (本日の主題ではなく背景)
url
hxxp://185[.]93[.]89[.]72/wget上の306バイトのスクリプトの配布元。23日のあいだファイルが1ビットも変わっていない
sha256
a8460f446be540410004b1a8db4083773fa46f7fe76fa84219c93daa1669f8f2389バイトのOpenSSH RSA公開鍵 · 本日19回 · 異なる14か所 · アドレス欄が空なので外部から受け取ったのではなくセッション内で作られたファイルと見る · 8/16以降24日目の同じハッシュ
sha256
4cec26851bdf98ec62e9bb7df003efe139b4014e5dc19f1ec7d56c3b79c4116d1,608バイトのBourne-Againシェルスクリプト · 本日1回 · 出所1か所 · 8/17以降サイズは毎回1,608バイトなのにハッシュは変わり続ける · 本日のものもアーカイブになかったハッシュだ
url
hxxp://5[.]182[.]210[.]174/ok上のスクリプトの配布元。9/06のブリーフがこのアドレスの累計ハッシュを「最低14種」と記した
sha256
01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b1バイトの空ファイル · 本日11回 · 出所1か所(ATK-50016C) · 8/17·8/18·8/21·8/22·8/23·8/30·9/03·9/06のブリーフにも「出所1か所・11回」として繰り返し記録された系列だ
sha256
4af5a5c98ad132095c6fbe7b02c242153a190a01cc321e50a916a0ca46fbaa629バイトのASCIIテキスト · 本日8回 · 出所1か所 · 8/18以降ほぼ毎日出てくる常時ハッシュ · アドレス未記録 · 内容はわたしたちのデータにないので判断しない
sha256
151cc94bab7928de2aacf2e9bdd9a2c362a70082dbb3749d35354f45fd303ddd3,514,627バイト · センサー02 · 本日3回 · 出所1か所 · アドレス欄そのものがない · アーカイブ23日分になかった新規ハッシュ
sha256
01bc2eccefe19f057c593875010187cb28608d03267034ef006206061b88234a3,518,723バイト · センサー02 · 本日2回 · 出所1か所 · 新規ハッシュ · 上のファイルとサイズの差がちょうど4,096バイトだが、それが何を意味するのかは根拠がない

事実 ここで目に留まる行がもう一つあります。昨日11回観測された 1バイトの空ファイルです。1バイトなら文字1個分です。午後1時9分に入ってきた ATK-50016C が23.76秒のあいだにコマンド20個を打って11件を受け取っていったのですが、その11件がすべてこの空ファイルでした。同じハッシュが8月17日以降、八つのブリーフに同じように「出所1か所・11回」と記されています。

推定 ビットのセットを開けたらケースが空だったようなものです。侵入には成功したものの、配達には失敗した系列と見ています。ドアが開いたからといって、いつも何かが入ってくるわけではありません。

今回は名前が見えただけです

事実 昨日、ファイル9個の名前にCPUの種類がそのまま書かれていました。だからわたしたちは「9種類だ」と数えることができました。本来はこんなによく見えません。

事実 わたしたちには 圧縮を解いてはじめて現れた配布アドレス12件が別にあります。hxxp://31[.]77[.]227[.]121/bins/ の下の parm · parm5 · parm6 · parm64 · parm7 · pm68k · pmips · pmpsl · pppc · psh4 · pspc · x86_64 です。UPXというツールで実行ファイルを圧縮しておくと、表面にはアドレスが一行も見えません。殻を剥がさないと出てきません。

推定 この12個の名前の後半もCPUの種類です。m68k · mips · mipsl · ppc · sh4 · spc · x86_64 · arm が複数セットで、昨日来たセットと構成が重なります。ですがこれは「同じ組織」の根拠ではありません。 二つの配布元をつなぐ値は、わたしたちのデータにはありません。ここから読み取るべきものは一つです — 組み込みLinuxを丸ごと狙ってCPUごとに1セットずつ作っておくやり方が、複数の系列で共通しているということ。

推定 そしてもう一つ。昨日のものは表面に名前がそのまま書かれていたから数えられました。圧縮して隠す側だったなら、9個のうち一行も見えなかったでしょう。 今日数えた九つという数字は、相手がわざわざ隠さなかったから出てきた数字です。

ドアを開けさせたパスワード

事実 昨日一日のログイン試行は 1,523回、異なる175か所から入ってきました。一日を秒に割って分けると 約57秒に1回 — ほぼ1分に1回、誰かがIDとパスワードを入れてみたようなものです。

事実 試された組み合わせは最低944種です。そのうちこの記事に書き写すのは 20種だけです。残りの 924種は個数だけ数えて値は書きません。 異なるIP3か所以上で繰り返された組み合わせだけを原文引用するのが、わたしたちの規則です。1〜2か所からしか出てこなかった組み合わせは、どこかで流出した 誰かの本物のアカウントかもしれないからです。

以下の20種は反対側です。複数の場所で繰り返されたので 「誰のものでもない出荷時の初期値」 と見なせるものです。

ID パスワード 異なる発信元
admin admin 17か所
345gs5662d34 345gs5662d34 13か所
user user 6か所
support support 5か所
root root 5か所
root 12345678 5か所
root 111111 5か所
root 1234 5か所
root admin 4か所
root password 4か所
guest guest 4か所
test test 4か所
root 123321 4か所
root 12345 4か所
root 123456 4か所
root 123456789 4か所
root 1234567890 4か所
root 1q2w3e4r 4か所
root vizxv 3か所
admin password 3か所

事実 20行のうち半分が IDとパスワードがまったく同じです。残りはキーボードで指がなぞる位置そのままです。いちばん下の vizxv だけが性格が違います。これは人が考えて使うパスワードではなく、ルーターやカメラのような機器に工場で入れておく初期パスワードです。

推定 この辞書はわたしたちを狙って作ったものではありません。どこでも通じる値を順番に入れてみるリストです。昨日ドアが開いた理由が「わたしたちだから」ではない、という意味です。

昨日一日の全体

事実 ドアが実際に開く側(センサー01)の一日の集計です。右の欄も一緒に見てください — 数字一つだけ見ても大きさがつかめません。

項目 9月8日 比べるもの
セッション 1,824件 1か所あたり平均10.4件
ユニーク発信元 175か所 —
ログイン試行 1,523回 一日で 約57秒に1回 · 1か所あたり平均8.7回
コマンド 1,980個 一日で 約44秒に1回
ポート2222 (SSH) 1,561セッション 全体の85.6%
ポート2223 (telnet) 263セッション ところが昨日の完結セッション5件は すべてこちら
画面録画 1,390件 そのうち閲覧可能なものは247件
保管中の検体 113個 —

事実 ポート別の合計(1,561 + 263)がセッション総計1,824とぴたり合います。そして隣のサーバー(センサー02)は数える単位が違うので 足しません。 二つのサーバーのユニーク発信元の合計は重複が分からないため 850か所が上限であり、実際の値はそれより小さいです。

事実 昨日サーバーの中で起きたことを種類別に数えるとこうなります。

何をしようとしたか 回数 比べるもの
偵察 — システムを調べる 1,281回 全コマンド1,980個の64.7%
実行権限の付与 179回 ダウンロード34回の5.3倍
ダウンロード後の実行 34回 —
ファイルダウンロード 34回 上と ぴたり同じだ
痕跡の削除 26回 —
永続化 — SSH鍵の設置 19回 —

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

事実 「ファイルダウンロード」34回と「ダウンロード後の実行」34回が ぴたり同じです。 昨日ダウンロードされたものは例外なく実行段階につながった、という意味です。

事実 ただし昨日の主役である ATK-2872E4 のセッションに付いた意図は3つだけです。ファイルダウンロード → 実行権限の付与 → ダウンロード後の実行。 偵察も、鍵の設置も、痕跡の削除も、このセッションにはありません。あの19回と26回は、他の別名がやったことです。一日の集計にあるからといって、このセッションのものとして書き写しはしません。

隣のサーバーでは別のドアが鳴った

事実 わたしたちはサーバーを2台置いてあります。2台目(センサー02)は奥まで入れない浅い罠なので、「どのドアを何か所が何回叩いたか」だけが残ります。 ログイン成功も、コマンドも、認証情報もここには存在しません。

ドア (サービス) ポート 叩いた回数 叩いた場所
VNC (画面共有) 5900 65,322件 (96.9%) 416か所
RDP (リモートデスクトップ) 3389 1,443件 110か所
SMB (ファイル共有) 445 331件 80か所
LDAP (アカウント照会) 389 222件 41か所
MSSQL (データベース) 1433 57件 12か所
ADB (Androidデバッグ) (未記録) 26件 (未記録)

事実 画面共有の65,322件は一日で割ると 1.3秒に1回 の割合です。416か所が分担して作ったので、1か所が平均157回叩いたことになります。この値は9月6日のブリーフが「観測12日中の最高値」と記した48,605件を、二日で再び超えたものです。

事実 相手が先に提示した規格も記録されます。画面共有では 003.003 が63,822回、003.008 が1,052回 — 旧式である003.003が98.4% です。ファイル共有の側は NT LM 0.12 116 · LANMAN1.0 107 · LM1.2X002 107 · PC NETWORK PROGRAM 1.0 54 · Windows for Workgroups 3.1 54 で、1990年代の語彙がリストの先頭に載ってきます。 リモートデスクトップのクッキーは hello 845 · <ip> 442 · 空の値5 · ランダムな9桁3件です。

推定 旧式の規格を先に差し出すのは 相手が古いシステムまで受け入れるスキャナーを使っているという意味であって、わたしたちのサーバーが旧式だという意味ではありません。

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

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

  • T1110.001Brute Force: Password Guessing — ログイン試行1,523回、引用可能な組み合わせ20種推定
  • T1078.001Valid Accounts: Default Accounts — admin/admin 17か所、root/1234系が多数、完結セッション5件すべてログイン成功推定
  • T1105Ingress Tool Transfer — 「ファイルダウンロード」34回、ATK-2872E4 のセッションあたり10件推定
  • T1222.002File and Directory Permissions Modification: Linux and Mac — 「実行権限の付与」179回推定
  • T1059.004Command and Scripting Interpreter: Unix Shell — 「ダウンロード後の実行」34回、cat.sh 1,875バイトのPOSIXシェルスクリプト推定
  • T1098.004Account Manipulation: SSH Authorized Keys — 「永続化 — SSH鍵の設置」19回、389バイトの公開鍵14か所推定
  • T1070Indicator Removal — 「痕跡の削除」26回推定
  • T1082System Information Discovery — 「偵察 — システム」1,281回で昨日の意図1位推定
  • T1046Network Service Discovery — センサー02で675か所がVNC·RDP·SMB·LDAP·MSSQLの五つのサービスに67,401回接触推定

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

事実 そして9行のうち、昨日の主役が踏んだのは 3行だけです。T1105(ファイルを持ち込む) · T1222.002(実行権限を与える) · T1059.004(受け取ったものを実行する)。ちょうど3段階、33秒です。

以前にもこういう形があった

推定 Miraiボットネット (2016)。 telnetの初期アカウント辞書でLinux機器にログインしたあと、CPUの種類ごとに別々に作っておいたELF実行ファイルを選んでダウンロードさせる構造でした。昨日観測された iran.<CPU種類> 9セットと 配布方式が同じ系列です。重なる点は三つです。① telnet + 初期アカウント辞書 ② ローダースクリプトがCPU別の実行ファイルを順に試す ③ x86のほかにもMIPS·ARM·PowerPC·SPARC·SH·m68kのような組み込みCPUを併せて狙う。(出典の種類: 公開されたソースコード · 米国US-CERT/CISAアラート TA16-288A · 複数ベンダーの分析レポート)

推定 Bashlite / Gafgyt (2014〜2016)。 Miraiより先に同じ3段構造を使っていた初期のIoTボットネット系列です。初期パスワード → シェルスクリプトのローダー → CPU別の実行ファイル。10年近く経った昨日も、わたしたちのセンサーに同じ形が入ってくるというのが要点です。(出典の種類: 複数のセキュリティベンダーの技術分析レポート)

事実 ここで止まります。わたしたちは検体分類サービスを連携していません。昨日受け取った9個がこの系列だという判定はしません。 似ているのは作り方であって、名札ではありません。

それで何をすべきか

ビットのセットを作らせない方法は、わたしたちにはありません。変えられるのは こちら側のネジがどれだけ外に出ているかです。

事実 1. 初期アカウント・簡単なパスワードをそのまま使っている · 可能性 高 上の表の20行は、すべて機器やディストリビューションが出荷時に入れておく値です。昨日1,523回の試行がこの辞書で入ってきており、記録が残った5つのセッションは 例外なくログインに成功したあとに始まります。 わたしたちのサーバーはわざと開けてあるものですが、試される辞書が何であるかはそのまま示してくれます。パスワード一つが破られたあと 33秒で外部のファイル10個が上がってきました。 実際のサーバーだったなら、その33秒が侵害の時点です。

事実 2. パスワードログインを許可していて鍵方式を使っていない · 可能性 高 昨日入ってきた認証試行は全量がパスワード経路です。鍵方式だったなら1,523回は成立しません。ところが侵入した側は、成功すると 自分の鍵からかけておきます。 昨日は鍵の設置が19回、389バイトのSSH公開鍵が異なる14か所から出てきました。SSH公開鍵は、平たく言えば パスワードなしで入れる予備の鍵です。サーバーの authorized_keys(許可された鍵のリスト)というファイルに一行書かれると、あとでパスワードを変えてもその鍵で入り続けられます。このファイルは8月16日以降 24日間ずっと1ビットも変わっていません。 ただし昨日の完結性が最上位のセッションはtelnetですが、telnetにはそもそも鍵認証という選択肢がありません。

事実 3. 管理ポートをインターネットにそのまま開けておいている · 可能性 高 わたしたちのサーバーのアドレスは、どこにも知らせたことがありません。それでも昨日、ドアが開く側に175か所、隣のサーバーに675か所が来ました。2台合わせて上限850か所です。画面共有のドア一つだけに 一日6万5千件 が付きました。実際のサーバーだったなら、管理画面がその6万5千回の候補の一つだったという意味です。露出そのものが条件です。

推定 4. 回数ベースの遮断(fail2banなど)だけを信じている · 可能性 中 昨日は、1か所が同じサーバーを繰り返し叩く方式ではありませんでした。1か所あたり平均8.7回であり、admin/admin も17か所から38回なので 1か所あたり2.2回 です。345gs5662d34 は13か所から14回で、1か所あたり1.08回です。「5回間違えたらロックする」といった規則は、昨日のほとんどの発信元では発動すらしなかったでしょう。 ですからこの統制の欠如が昨日の決定打だったとは言えないので「中」に置きます。IP単位だけでかけておくと、こうして薄く広がった試行にはほぼ無力です。アカウント単位・全体の試行回数の基準を併せてかけないと引っかかりません。

事実 5. 外に出ていく接続を止めていない · 可能性 高 ここが昨日の核心です。「ファイルダウンロード」34回と「ダウンロード後の実行」34回がぴたり同じです。昨日、実際の被害を生む段階はすべて サーバーが外に出ていってファイルを受け取ってくる動作でした。配布元は hxxp://94[.]154[.]43[.]221/ · hxxp://185[.]93[.]89[.]72/wget · hxxp://5[.]182[.]210[.]174/ok の3か所です。出ていく道が塞がれていたなら、この34件はすべて失敗します。 侵入は鍵の問題ですが、武装は通信の問題です。

推定 6. ログをサーバーの中だけに置いている · 可能性 中 昨日、痕跡を消そうとする意図が26回分類されました。わたしたちはハニーポットなのでセッションが丸ごと録画されますが(昨日1,390件)、実際のサーバーはログを外に送り出さなければ、消されたあとに残るものがありません。ただし昨日の主役のセッションには痕跡の削除が含まれていないので「中」に置きます。33秒のセッションは、翌朝には痕跡が残っていないかもしれません。

事実 昨日新たに確認された配布元 hxxp://94[.]154[.]43[.]221/ は、C-TAS(韓国インターネット振興院のサイバー脅威情報共有体系)への届出対象です。ただしわたしたちが確認できるのは 送信が成功したというところまでであり、相手側に実際に登録されたかどうかは別途確認が必要です。

私たちが分からないこと

このブログが他と違う点です。知っていることより、分からないことを書くのに時間をより多く使います。

昨日の主題について確認できないこと

  • [確認不可] 記録が残った5つのセッションはすべて、接続プログラムの指紋の欄が空です。telnetには指紋(hassh)が残らないからです。ですから昨日の主役 ATK-2872E4 を、わたしたちが持っている指紋クラスタ39個のどこにも結び付けられません。昨日、検体を置いていった指紋は SSH-2.0-Go 系の二つ(16443846… · 98ddc5604…)ですが、これらが iran.* の配達と関係があるのか、わたしたちのデータはつないでくれません。
  • [確認不可] マスキング処理された発信元 94.154.x.x と配布元 94[.]154[.]43[.]221 が同じ機器なのか、同じ帯域の別の機器なのか 判断する根拠がありません。 後ろの二つの区切りは伏せられており、復元しません。
  • [確認不可] iran.sparc 一つだけが動的リンク・43,832バイトで残りの8個と違う 理由が分かりません。 作るツールが違ったのか、丸ごと作るのに失敗したのかを区別できません。
  • [確認不可] cat.sh を含め、昨日の検体の 内容はわたしたちの手元にありません。 これらの実行ファイルが何をするのか(DDoSなのかマイニングなのかプロキシなのか)判断する根拠がありません。外部の検体分類タグも今回は付いていません。
  • [確認不可] ATK-50016C はコマンド20個、ダウンロード11件なのに 意図のリストが空です。 分類器が一つも分類できなかったのか、分類対象の行為が実際になかったのかを区別できません。
  • [確認不可] 接続ポートを2223と記したのは、ポート別集計の2223(263件)とプロトコル別集計のtelnet(263件)が 数値上一致するからです。セッション記録そのものにはポートの欄がありません。推定によるマッピングです。
  • [確認不可] 「アーカイブになかった新規」という判断は、8月16日〜9月7日のブリーフ23件と照合したものであり、元のログの全数照合ではありません。 ブリーフに載らなかった検体は、この比較には引っかかりません。

データそのものを疑うべきこと

  • [確認不可] 指紋の「これまでの累計IP」の値が、依然として 減ることがあります。 f555226d…(SSH-2.0-libssh_0.9.6)は8/29に289か所 → 8/30に366か所 → 昨日は226か所です。9月5日に指摘した「累計が累計ではない」状態が、三日後もそのままです。この欄を「累計」として読んではいけません。
  • [確認不可] センサー02で 一つの発信元が複数のドアをまとめてなぞったのかを計算できません。 サービス別の集計は発信元のリストをくれず、上位発信元のリストはサービス別に分かれていません。サービス別のユニークIPの合計(659)と全体(675)の16か所の差もADBの発信元のためと見られますが、確定できません。0と書けば虚偽になるので「算出不可」としておきます。
  • [確認不可] センサー02の検体2件が ADBの経路から入ってきたのかが明示されていません。 02でファイルを保存できる経路がADBだけで、保存検体数が2で合うという状況証拠だけです。ファイルの種類の情報もないので、何なのか分かりません。
  • [確認不可] その二つの検体のサイズの差が ちょうど4,096バイト であることが何を意味するのか、根拠がありません。9月3日にも別の検体のペアで同じ4,096の差を記録し、同じ結論(根拠なし)を出しました。

わざとつなげなかったこと

  • [除外] 背景統計として入ってきた脆弱性の指標(追跡CVE 6,622件 · CISA KEV 390件 · ランサムウェア連携の確認98件)は、KISAのセキュリティ告知から取り出した値です。昨日観測されたどのセッション・検体とも結び付かず、昨日の侵入はCVEを使っていません。
  • [確認不可] C-TASへの届出は 送信が成功したというところまでしか 確認できません。昨日の新規配布元の処理結果も同じです。

そもそも判断しないこと

  • 通信事業者・組織(ASN·ISP) — 関連するデータベースがありません。推定しません。
  • 地理情報 — 上と同じです。そもそもIPの地理情報は帰属の根拠になりません。ファイル名に iran という文字が入っていますが、これは攻撃者が付けた文字列にすぎません。 国家や主体と結び付ける根拠は、わたしたちには一切ありません。この記事は いかなる国家・企業・個人も攻撃者として名指ししません。
  • VPN·Tor·クラウドかどうか — 判別する手段がありません。
  • 検体分類(VirusTotal) — 連携していません。昨日の9種が既知のマルウェア系列なのか、この記事では判定しません。
  • 接続プログラムの文字列(User-Agent) — 二つの観測面ともWeb(HTTP)ではありません。01はSSH·telnet、02はSMB·RDP·VNC·MSSQL·LDAP·ADBです。
  • 脆弱性番号(CVE)との結び付け — SSH·telnetの攻撃はほとんど特定の脆弱性を参照せず、02も規格を合わせる段階なので同じです。

工具セットを丸ごと持ち歩く人は、その家のネジがどんな頭なのかを気にしません。一つでも合えばいいので、尋ねる理由がないのです。

昨日わたしたちのサーバーに上がってきた9セットも、同じ理由で9セットでした。ルーターだろうがレコーダーだろうがセットトップボックスだろうが、何が引っかかるか分からないので全部投げておいて、合うものだけ動かせばいい。わたしたちが選ばれたのではなく、リストに引っかかったのです。

ですからこちら側でやるべきことは、セットを作らせないことではありません。それは不可能です。工場出荷時のパスワードを変え、telnetのような管理ポートをインターネットにそのまま出さず、機器が外からファイルを受け取ってくる道を塞ぐこと。 昨日の33秒のセッション2回が指し示した先は、まさにそこでした。


観測日は2026年9月8日で、この記事はその翌日にまとめました。発信元IPはブリーフでマスキング処理された形(94.154.x.x)のまま書き写し、復元していません。配布元のアドレスは誤って接続されないようにデファング(hxxp://、[.])の状態を本文とIOCブロックの両方で維持しました。認証情報は 異なるIP3か所以上で繰り返し観測された組み合わせ20個だけ を原文引用し、残りの924個は個数だけ明かして値は書きませんでした。通信事業者・国籍・VPNかどうかのように、わたしたちに計測手段がない項目は推定せず「分からない」として残しておきました。