SecurityHeroblog

ファイルは一つも残っていないのに、鍵だけが三日目も増え続けている

63秒のセッション一つが、検体は一件も残さずSSH公開鍵だけを植えて出て行きました。同じハッシュの鍵が8/16・8/17・8/18と三日連続で出ており、植えた送信元は10か所 → 12か所 → 16か所へと増えています。ウイルス対策ソフトが捕まえるファイルが存在しない侵害を、どう気づけばいいのかを整理しました。

マンションの管理事務所には訪問車両の常時登録名簿というものがあります。一度載せておけば、ゲートが自動で開きます。ところがこの名簿は紙一枚です。玄関の暗証番号を変えても、防犯カメラを新しく付けても、名簿から名前が消えることはありません。そして誰も名簿を覗きません — なくなった物がないからです。

昨日うちのハニーポットで起きたことが、まさにこの形でした。

63秒、コマンド17個、保存された検体0件

事実 ATK-C17F4E(169.58.x.x)がtelnetでログインに成功しました。滞在時間は約63秒、実行したコマンドは17個。そのなかで分類された意図は5種類です — 偵察(システム)、ファイルのダウンロード、実行権限の付与、ダウンロード後の実行、そして永続化(SSH鍵の植え付け)

事実 ところがこのセッションのdownload_count0です。保存された検体は一件もありません。

事実 昨日の完結性上位5セッションのうち、偵察から永続化まで段階がつながったのは、このセッション一つだけでした。

ここで少し用語を解いておくと、永続化とは「次にまた入る方法をあらかじめ作っておくこと」です。そしてSSHにおけるその方法は、たいていauthorized_keysというテキストファイルです。このファイルに公開鍵が一行入っていれば、その鍵の対を持つ者はパスワードなしでログインできます。訪問車両の名簿にナンバーが一行載ったのと同じです。

389バイト、三日連続で同じハッシュ

事実 昨日の観測区間全体で、389バイトのOpenSSH RSA公開鍵(sha256 a8460f44…)が、互いに異なる送信元16か所から16回観測されました。このファイルにはURLが記録されていません — 外部からダウンロードしたのではなく、セッションのなかで作られたという意味です。

事実 アーカイブと突き合わせてみました。同じハッシュの公開鍵が、8/16には送信元10か所、8/17には12か所として記録されています。昨日は16か所です。三日連続で同一の鍵であり、植えられた場所の数は増えています。

推定 ウイルス対策ソフトであれEDRであれ、結局は「悪いファイル」を探す道具です。ところがここに残ったのは389バイトのありふれたテキスト一行です。形式上は何の問題もないファイルであり、実際に誰かは毎日まったく正常に同じファイルを書いています。捕まえる根拠がありません。

事実 そして昨日「永続化 — SSH鍵の植え付け」に分類されたコマンドは18回、「痕跡の削除」は19回でした。痕跡を消す行為のほうが、鍵を植える行為より多かったのです。

  1. 事実 ATK-57608F telnetログイン成功。約16分30秒のあいだにコマンド586個 — 昨日の全コマンド2,966個の約20%を一セッションが占める(平均1.7秒に1個)。ダウンロード1件。TTY録画あり(内容は非掲載)
  2. 事実 ATK-A4A3FE telnetログイン成功。約68秒 · コマンド31個 · ダウンロード1件。意図はファイルのダウンロード → 実行権限の付与 → ダウンロード後の実行
  3. 事実 ATK-C17F4E telnetログイン成功。約63秒 · コマンド17個。意図5種(偵察-システム · ファイルのダウンロード · 実行権限の付与 · ダウンロード後の実行 · 永続化 SSH鍵の植え付け)。download_count 0。昨日唯一、偵察から永続化までつながったセッション
  4. 事実 ATK-2A2021 telnetログイン成功。約88秒 · コマンド31個 · ダウンロード1件。ATK-A4A3FE とコマンド数 · 意図の組み合わせが同一である
  5. 事実 ATK-ABE8B7 telnetログイン成功。約75秒 · コマンド22個 · ダウンロード11件。意図は「防御の無力化」単独。11件すべてが1バイト · マジックナンバーのない空ファイル(01ba4719…)であり、昨日このファイルの配信元はこの一か所のみ
  6. 事実 389バイトのOpenSSH RSA公開鍵(a8460f44…)が、互いに異なる送信元16か所から16回観測。URL未記録 — 外部ダウンロードではなくセッション内で生成されたファイル
  7. 事実 同じハッシュの公開鍵が8/16は送信元10か所、8/17は送信元12か所、昨日は16か所。三日連続で同一ハッシュであり、送信元数は増加傾向
  8. 事実 意図の分類 — 永続化(SSH鍵の植え付け)18回、痕跡の削除19回、防御の無力化1回、偵察(ネットワーク)2回
  9. 事実 セッション2,027件 / ユニーク送信元249か所 / ログイン試行1,581回 / コマンド2,966個 / TTY録画1,424件。ポート2222(SSH)1,657件、ポート2223(telnet)370件 — telnetは約18%なのに、完結性上位5セッションはすべてtelnet(三日連続)

指紋が採れる側と、実際に破られる側が違います

これは昨日のデータで最も引っかかった部分です。

事実 昨日のSSHクライアント指紋クラスタは36個で、最大のものはf555226d…(クライアント文字列SSH-2.0-libssh_0.9.6、昨日のIP16か所 · 累計124か所)です。ところが昨日観測された7つの指紋クラスタは**すべてdelivered_samples=false**です。指紋が残るSSH側では、検体を実際に送り込んだところが一つもありませんでした。

事実 実際の侵入・ダウンロード・鍵の植え付けは、すべてtelnetで起きました。そしてtelnetセッションには、そもそもSSHクライアント指紋が存在しません — 昨日の主題セッションの指紋・クライアント値も空です。

推定 まとめて見るのに都合のよいトラフィックと、実際に被害が出るトラフィックが、互いに別の層にあるという意味です。分類がうまくいく側だけを覗いていると、肝心の破られる側は画面に出てきません。

事実 付け加えると、指紋が同じであることは同じツール・同じビルドを使ったという意味であって、同じ組織だという意味ではありません。同じディストリビューションの標準クライアントを使う無関係な人も、同じ値を持ちます。

どうやって入ったか — 相変わらずパスワードです

事実 昨日のログイン試行は1,581回、送信元は249か所でした。送信元一か所あたり平均6.4回です。互いに異なるIP3か所以上で観測された組み合わせだけを抜き出すと、こうなります。

ID パスワード 観測されたIP数
admin admin 26か所
345gs5662d34 345gs5662d34 16か所
root admin 9か所
root 3245gs5662d34 8か所
root root 7か所
root password 6か所
root (空のパスワード) 5か所
root 1234 5か所
root 12345 5か所
support support 4か所

事実 そして1,388個の組み合わせは載せていません。互いに異なるIP3か所未満でのみ観測されたものです(8/16の934個、8/17の830個から増えました)。一か所だけで出た組み合わせは、どこかで実際に流出したアカウントである可能性があるため、値は書かず個数だけを数えます。

事実 昨日の観測分では、CVEやエクスプロイトを参照した経路はありませんでした。すべて「合っているパスワードを探し当てる」経路でした。

残していったもの

sha256
a8460f446be540410004b1a8db4083773fa46f7fe76fa84219c93daa1669f8f2389バイトのOpenSSH RSA公開鍵 · 16回観測 · URL未記録(セッション内で生成) · 8/16 · 8/17 と同一ハッシュ · 配信元16か所
sha256
a6296a79f44e21b76604d2d2bbf795d2cf380f70e39d45fbf166707ff3b4a6a4306バイトのPOSIXシェルスクリプト · 13回観測 · 配信元13か所 · 8/17 にも同一ハッシュ · 同一URL
url
hxxp://185[.]93[.]89[.]72/wget上記シェルスクリプトをダウンロードしたアドレス
sha256
6aa5054a95d23277df417a5f69cf292e19bc2ef0406bc0c1884935a44e3ce7971,608バイトのbashスクリプト · 配信元 ATK-10149C
url
hxxp://5[.]182[.]210[.]174/ok上記スクリプトをダウンロードしたアドレス
sha256
4af5a5c98ad132095c6fbe7b02c242153a190a01cc321e50a916a0ca46fbaa629バイトのASCIIテキスト · 12回観測 · URL未記録 · 配信元 ATK-BECAD3
sha256
01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b1バイト · マジックナンバーのない空ファイル · 11回観測 · 配信元 ATK-ABE8B7 · 8/17 には121回 · 送信元2か所

アドレスはわざと壊して書いています(hxxp://[.])。そのまま貼り付けても接続されません。

事実 最後の行に目が行きます。1バイトの空ファイルは8/17の主題でした。あのとき121回・送信元2か所だったものが、昨日は11回・送信元1か所に減りました。なぜ減ったのかはデータからは分からないので、事実としてだけ書き留めておきます。

攻撃段階に置き換えると

観測された行動をMITRE ATT&CKの技法に置き換えると、こうなります。すべて[推定]です — 私たちが見たのはコマンドであって、攻撃者の意図ではありません。

  • T1110.001Brute Force: Password Guessing推定
  • T1078Valid Accounts推定
  • T1059.004Command and Scripting Interpreter: Unix Shell推定
  • T1082System Information Discovery推定
  • T1016System Network Configuration Discovery推定
  • T1105Ingress Tool Transfer推定
  • T1222.002File and Directory Permissions Modification: Linux and Mac推定
  • T1098.004Account Manipulation: SSH Authorized Keys推定
  • T1070Indicator Removal推定
  • T1562Impair Defenses推定

どこかで見た気がするなら

推定 2016年から続くMirai ボットネット系と侵入の構造が同じです。telnetの初期資格情報で入ったあと、Webサーバの/bins/パスからCPUアーキテクチャ別のバイナリを順に取得し、合うもの一つだけを実行させる方式です。昨日観測されたファイル名の規則(parm, parm5, parm64, pmips, psh4, x86_64 …)がこの慣習と一致し、完結セッションがすべてtelnetである点も符合します。

米国司法省の起訴・有罪答弁の記録が残っており、複数ベンダーの公開分析レポートがある事案です。ただし昨日の主題であるSSH公開鍵の永続化は、この事例では説明しきれない部分です。似ているという言葉で済ませてはいけない箇所なので、別に書き留めておきます。

で、何をすればいいのか

推定 昨日のデータが指し示す順序はこうです。

  1. ~/.ssh/authorized_keysを直接開いて見る。 知らない鍵が一行でもあれば、それがすべてです。鍵の植え付けの意図が18回、植えた送信元が16か所でした。
  2. そのファイルの変更を通知で受け取る。 パスワードを全部変えてブルートフォースを遮断しても、すでに入った鍵はそのまま残ります。
  3. ログを機器の外に保存する。 痕跡の削除19回、防御の無力化1回が実際に観測されました。昨日、私たちが状況を再構成できたのは、TTY録画1,424件が残っていたからです(内容はこの記事には含めません)。
  4. 管理ポートをインターネットに直接開けておかない。 telnetは全セッションの約18%ですが、完結セッションはすべてtelnetです。セッション数だけを見て優先順位を決めると、実際に破られる18%を見落とします。
  5. アウトバウンドを遮断する。 ただしこれだけでは足りません — ATK-C17F4Eはダウンロードが0件だったにもかかわらず、鍵の植え付けまで到達しました。

昨日一日の全体

セッション 2,027件
ユニークIP 249か所
ログイン試行 1,581回
実行されたコマンド 2,966個
SSH (2222) 1,657件
telnet (2223) 370件

コマンド2,966個はすべてログインに成功したあとに実行されたものです。

昨日観測された配布元・C2はC-TASへ通報しました。転送レイヤの成功のみが確認されており、KISA側での取り込みの可否は別途確認が必要です。

60秒で見る

同じ観測分を短い動画にもしました。

私たちが分からないこと

このブログは、分かっていることと分かっていないことを分けて書きます。昨日の観測分で確認できなかったことです。

  • ATK-C17F4Eがダウンロードに失敗したのか、受け取ったが保存されなかったのか。 意図には「ファイルのダウンロード」「ダウンロード後の実行」があるのにdownload_countは0です。データが両者を区別してくれません。確実なのは「意図は分類され、保存された検体はない」ということだけです。
  • 公開鍵を植えた送信元16か所と、最大の指紋クラスタのIP16か所が同じ集合なのか。 数が同じであるだけで、二つの集合を結びつける根拠がありません。telnetセッションには指紋そのものがありません。
  • 8/16・8/17・8/18の送信元どうしが重なるのか。 別名(ATK-XXXXXX)はソルトを混ぜて作るため、日付をまたいで追跡できません。したがって10+12+16を足して「38か所」と言うことはできません
  • 指紋が同じであることが、同じ組織という意味なのか。 違います。同じツール・同じビルドを使ったという意味であり、同じディストリビューションの標準クライアントを使う無関係な人も同じ値を持ちます。
  • ATK-ABE8B7がなぜ昨日の完結性の最高値(42)なのか。 意図は「防御の無力化」一つだけなのに、スコアは最も高いのです。算式がデータにないため説明できません。
  • 1バイトの空ファイルがなぜ減ったのか。 121回・2か所 → 11回・1か所。減少の原因はデータからは分かりません。
  • 9バイトのASCIIテキスト(4af5a5c9…)が何なのか。 12回観測されましたが、内容がブリーフにないため判断できません。
  • Discord webhook URL 1件。 どのセッション・どの検体と結びつくのかが明示されていないため、昨日の事実関係には入れませんでした。
  • 集計値が一日全体を覆っているのか。 主要な5セッションがUTC 00:45〜04:49に固まっているのに、生成時刻は15:05Zです。観測区間が明示されていません。
  • 16か所が同じ鍵を植えた理由。 同じツールを使った結果なのか、鍵を共有した結果なのか分かりません。8/16・8/17のブリーフにも同じ項目が未解決のまま残っています。
  • SSH authorized_keys 永続化系統の公開事案。 出典を確認できなかったため、事例として入れませんでした。
  • 背景となる脆弱性の統計(CVE 4,252件 / CISA KEV 341件 / ランサムウェア関連95件)。 KISAのセキュリティ告知に基づく統計であり、昨日の観測分と直接つながるものではありません。

そしてそもそも確認する手段がないものです。これは分からないこととは違います — 推定しないほうが正解です。

  • ASN・ISP — GeoIP・ASNデータベースを持っていません。推定しません。
  • 地理的位置 — 同じです。IPの地理情報は、そもそも帰属の根拠にもなりません。
  • VPN・Tor・クラウドかどうか — 判別する手段がありません。
  • VirusTotalの検知結果 — 未連携です。検体の分類はMalwareBazaarのタグを使います。
  • User-Agent — SSH・telnetにはUser-Agentそのものが存在しません。HTTP攻撃は別のソースです。
  • CVEとの結びつき — SSH・telnetの攻撃は脆弱性を参照しない場合がほとんどで、昨日の観測分も資格情報を狙ったものでした。

名簿に名前が一つ載りました。三日目で、載った場所は十か所から十六か所になりました。なくなった物がないから誰も名簿を開いて見ないのなら、それは増え続けるでしょう。


この記事は2026-08-18のハニーポット観測分をもとに作成されました。送信元IPはブリーフのマスキング形式そのままで表記し、配布アドレスは接続されないよう変形(defang)しています。引用した資格情報は、互いに異なるIP3か所以上で観測された組み合わせのみを含めており、それ未満でのみ観測された1,388個の組み合わせは個数だけを明かし、値は載せていません。