接続初回時に発生する MitM(中間者攻撃)検知の回避方法について、VPS やあらゆるクラウドプロバイダーで一般的な設定手順と注意点を以下にまとめます。

- **原因**: OpenSSH のデフォルト設定では、リモートホストの公開鍵がローカルの `known_hosts` ファイルの内容と一致しない場合、「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!(または類似するメッセージ)/ MitM attack potentially in progress」と表示されます。これは重要なセキュリティ機能ですが、新規接続時や IP アドレス変更時などに誤検知が生じる可能性があります。
- **対策方法**:
  - リモートホストの正しい公開鍵を手動または自動登録ツールを利用して `known_hosts` ファイルに追加する。
  - 「Host key checking」を無効にする設定(例:`StrictHostKeyChecking no`)を行う場合は、セキュリティリスクが高まるため非常に慎重に取扱いください。
- **設定変更手順**(`~/.ssh/config` の編集):
  ```bash
  echo "Host *
    StrictHostKeyChecking no" >> ~/.ssh/config
  ```
  その後、SSH コネクショングリフを再度試してください。
- **注意点**: 公開鍵検証の無効化はセキュリティ上の重大な弱点となりますので、信頼できる環境でのみ実施すること強くお勧めします。

2026/05/08 20:26

接続初回時に発生する MitM(中間者攻撃)検知の回避方法について、VPS やあらゆるクラウドプロバイダーで一般的な設定手順と注意点を以下にまとめます。 - **原因**: OpenSSH のデフォルト設定では、リモートホストの公開鍵がローカルの `known_hosts` ファイルの内容と一致しない場合、「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!(または類似するメッセージ)/ MitM attack potentially in progress」と表示されます。これは重要なセキュリティ機能ですが、新規接続時や IP アドレス変更時などに誤検知が生じる可能性があります。 - **対策方法**: - リモートホストの正しい公開鍵を手動または自動登録ツールを利用して `known_hosts` ファイルに追加する。 - 「Host key checking」を無効にする設定(例:`StrictHostKeyChecking no`)を行う場合は、セキュリティリスクが高まるため非常に慎重に取扱いください。 - **設定変更手順**(`~/.ssh/config` の編集): ```bash echo "Host * StrictHostKeyChecking no" >> ~/.ssh/config ``` その後、SSH コネクショングリフを再度試してください。 - **注意点**: 公開鍵検証の無効化はセキュリティ上の重大な弱点となりますので、信頼できる環境でのみ実施すること強くお勧めします。

RSS: https://news.ycombinator.com/rss

要約

日本語翻訳:

要旨: 本稿の核心となるメッセージは、Hetzner などのクラウドプロバイダーにおける重要なセキュリティギャップを埋めるための、新しいプロバイダ非依存手法であり、そのためには cloud-init を使用することである。これにより、おそらく漏洩した利用者データに依存することなく、初回の接続ごとに一時的な SSH ホストキーを注入する。このアプローチは、特にクラウドのメタデータサービスが侵害された場合でも、偽物のホスト識別子を利用したりトラフィックを迂回させたりすることを防ぐことで、中間者攻撃(Man-in-the-Middle)に対する防御を実現する。標準的な「最初の使用時に信頼する」(Trust On First Use)モデルとは異なり、この手法は一時的なキーを主の known_hosts ファイルから独立させ、OpenSSH の設定機能である

HashKnownHosts
などの機能を活用してデータ漏洩を防ぐ。セキュリティモデルでは、システムが一時的なキーを削除する前に、管理者が直ちにログインし、これらの一過性のキーを自らの長期保有の秘密鍵に置換することを前提としている。したがって、利用者の設定データが漏洩しても、一時的なキーの有効期限が切れるとすぐに無害化する。攻撃者が事前に接続してコマンドを実行することに成功すれば、それでもなおキーを収集することは可能ではあるが、この手法は複雑なインフラストラクチャの変更を必要とせずに、初期の仮想マシン侵害に対して著しく困難度を高めている。

本文

この簡易スクリプトは、新規に生成された仮想マシン(VM)に対する最初の SSH 接続で攻撃を検知・遮断します。これは、専用ソリューションを提供していないクラウドプロバイダー(例:Hetzner Cloud など)においても機能します。必要なのは広く標準的にサポートされている「cloud-init」のみです。

【要約(技術者向け;詳細な説明は後述)】
cloud-init を介して仮の SSH 接続先ホストの秘密鍵を注入し、この仮鍵をほんの一瞬だけ信頼するだけで十分です。これにより、「本番用」(長期利用可能な)SSH ホストキーの生成および取得が可能になります。

本スクリプトは、この技術のシンプルかつ堅牢な実装例であり、スクリプト内のコメントで採用された設計判断についても言及されています。なお、この技術自体は新規と考えられます。適切な解説記事や、他のプロバイダー依存ではない解決策に関する資料をまだ見つけることはできませんでした(ただし、訂正のご教示も歓迎いたします)。

本手法は「最初の接続」を守ることに重点を置いており、SSH が表示する「ホストの真正性が確認できません [...] ですか?」という問いに対して単純に「yes」と回答し、Trust On First Use (TOFU) に留まるケースとは異なります。後者では、攻撃者がトラフィックをプロキシ経由へ誘導したり、仮に一時的であってもあなたの VM への接続を試みたりするリスクが依然として残ります。

さらに、この手法は cloud-init のユーザデータ(userdata)の漏洩も無害化します。

cloud-init を介して長期利用可能な SSH ホスト(秘密)鍵を注入することは、「公開鍵の一部を ~/.ssh/known_hosts に追加することで最初の接続を検証可能にする」という目的では機能しますが、貴重な秘密鍵材料が cloud-init の userdata 内に残ることになります。これらは攻撃者がメタデータサービスから入手できる可能性が高く、VM 上で動作する多くのプロセスが通常アクセス可能な情報です。例えば Hetzner VM 上の例示:

curl http://169.254.169.254/hetzner/v1/userdata

攻撃者は、SSRF(サーバーサイドリクエストフォージェリー) exploits を利用して特定のプロセスを欺き、上述のような機密情報を引き出させることが可能です。この SSRF は、プロバイダーが解決策を提供している場合でもブロックされていないことが往々にしてあります。あるいは、クラウド事業者の他のシステム(例:Hetzner が明確に警告する通り「パスワードその他機密情報を保存すること」を避けるべきと指摘)から、あるいは管理者の作業環境から漏洩するリスクも存在します。

セキュリティ分析/脅威モデル

本手法では、(Open)SSH プロトコルおよびその実装の安全性を前提としており、攻撃を検知する能力を管理者(あなた)に依存することはありません。

我々は、以下のようなネットワーク上の攻撃者に対して防御可能です:

  • 管理者の作業環境の完全性を保護し、
  • VM の完全性も同時に保護する場合において、

攻撃者が以下のいずれかを達成したとしても:

  • ネットワークに対して完全な統制権(「中間者攻撃」)を持っている場合、および/または
  • スクリプトが終了した時点以降(成功・失敗を問わない)に、cloud-init のユーザデータを入手できた場合においても、

なぜなら、攻撃者は鍵材料を「まだ有効である」という時点で取得することには成功しないからです。

一時的な SSH ホスト鍵の誤用を防ぐため、本スクリプトは該鍵を仮ディレクトリに保存する一方で、~/.ssh/known_hosts には一時的な SSH ホスト鍵を記録しません。

管理者の作業環境がハッキングされたとしても、(長期利用可能な)SSH ホスト(秘密)鍵を取得することはできません。
我々は、**(のみ)**以下の要件を満たす攻撃者に対して VM(およびその長期利用可能な SSH ホスト(秘密)鍵)を守ることができます:

  • ネットワークに対して完全な統制権(「中間者攻撃」)を持ち、かつ
  • 管理者の作業環境に対して完全な統制権を持っていても、

しかしながら、実際に VM に接続していない場合に限られます(現実的なシナリオでは、ログを確認することでこれが証明され得ます)。これは、長期利用可能な SSH ホスト(秘密)鍵が元々管理者の作業環境上に存在せず、かつ攻撃者が実際には VM への接続を行っていないためです。
(※実際に VM に接続する攻撃者の場合、SSH ホスト鍵を取得してしまう可能性はあります。例:

ssh root@<VM> cat /etc/ssh/ssh_host_*
など。)

VM またはクラウドプロバイダーをハッキングされたとしても、管理者の作業環境へのアクセスは得られません。
我々は、**(のみ)**以下の要件を満たす攻撃者に対して管理者の作業環境の完全性を守ることができます:

  • ネットワークに対して完全な統制権(「中間者攻撃」)を持ち、かつ
  • VM および/またはクラウドプロバイダーに対して完全な統制権を持っている場合においても、

これは、(Open)SSH が安全であると仮定しているためです。

このシナリオに対する追加的な防護策として、本スクリプトは VM からの出力を ~/.ssh/known_hosts に単純に書き込むのではなく、OpenSSH の鍵ローテーション機能を利用して長期利用可能な SSH ホスト鍵をその場所に配置します。これにより以下の利点が得られます:

  • 侵害されたホストが ssh の known_hosts パーサーへ悪意のあるデータを注入することを防止し、かつ
  • VM が実際に制御する鍵のみを ~/.ssh/known_hosts に書き込むことを保証し、かつ
  • HashKnownHosts などの OpenSSH オプション(および将来追加され得る関連オプション)を正しく扱うことを保証します。

アサイド:攻撃者が本当にネットワーク攻撃を成功させられるのでしょうか?

答えは「場合による」です。特に、あなたがすべての接続が過去から現在に至るまで本来の宛先ではなく異なるマシンへ行き続けていることに気づき、パスワード入力(最初の接続か以降のいずれかの接続においても)に応じて拒絶し、SSH エージェント接続または X11 接続を転送しないよう設定していなければ、攻撃者は失敗に終わる可能性が高いです。

以下は簡略化された非包括的なリストであり、ssh-mitm に感謝します:

  • 攻撃者が成功する可能性が高いのは、実在のターゲットホストではなく、攻撃者によって制御されているマシンへのアクセスを誤認させることに成功した場合です。そうでない場合、
  • 攻撃者があなたの入力により実在のホストへログインすることを可能にする情報を得て、あなたを欺くことに成功する場合です。具体的には:
    • あなたがパスワードを使って(攻撃者のマシンへ)ログインした場合;または
    • どの認証方法であってもログインした後、プロンプトに従ってパスワードを入力した場合;または
    • どの認証方法であってもログインし、かつ SSH エージェント接続を転送した場合。
    • ただし上記のいずれでもない場合は、攻撃者は失敗する可能性が高いです:実在のホストへのアクセスが必要でありながら、あなたの入力を用いて実在のホストにログインできなければなりません。

加えて/あるいは代替として、あなたがどの認証方法も使用し X11 接続を転送する場合には、攻撃者があなたの作業環境を攻撃することに成功する可能性もあります。

同じ日のほかのニュース

一覧に戻る →

2026/05/11 2:19

ローカル AI が標準となる必要があります。

## Japanese Translation: 開発者は、安定的なアプリケーションと厳格なプライバシーを確保するため、脆弱であるクラウドホスト型モデルよりも、Apple 製の組み込みローカル AI ツール(`SystemLanguageModel` および `LanguageModelSession` など)を優先すべきです。外部サーバーへの依存は、課金問題やサービス停止時にサービスがクラッシュするという致命的な障害点を生じさせると同時に、機密ユーザーデータを保持リスクおよび潜在的な侵害に晒すことになります。対照的に、データ処理を安全にデバイス上で実行することにより、不必要なサーバー経由の迂回とベンダー依存を排除し、アプリケーションを強固なものに保てます。「Brutalist Report」という iOS クライアントは、典型的なクラウドソリューションに見られる複雑なアカウント要件を回避するため、ネイティブ API を使用して完全にローカルで記事のサマリーを生成する優れた例です。長いコンテンツの場合には、テキストをチャンク化(約 10k 文字)し、各チャンクごとに事実のみを含むノートを作成した後、それらをローカルで統合して最終的なサマリーを生成する推奨ワークフローがあります。このワークフローの将来形としては、`@Generable` および `@Guide` といった Swift の構造体を使用し、構造化された AI 出力を強制して非構造化データのようなデータをそのまま受け取るのではなく、UI が一貫したフィールドを確実にレンダリングできるようにする方向性が考えられます。この変化により、ユーザーは情報がデバイスから離れることがないと信頼できるようになります。企業にとって、ローカルモデルの導入は、AI をコストが高く予測不能な外部依存体から、サマリー化や分類を効率的に行い、ユーザー所有データを扱いながらレート制限や停止時間への心配なしに運用可能な信頼性の高い低コストサブシステムへと変革させます。開発者は、クラウドモデルを真に必要な場合のみ使用し、ローカル AI をノベルティなチャットボックスではなく、予測可能で信頼できる動作を持つ subsystem として扱うべきです。

2026/05/11 10:23

手書きコーディングに戻ろうとしています。

## Japanese Translation: k10s(NVIDIA クラスター運用者向けの GPU 意識型 Kubernetes ダッシュボード)の構築から得られた主な教訓は、AI は機能の迅速な提供に優れている一方で、システムアーキテクチャにおいては頻繁に失敗し、倒壊しやすいコードベースを導き込む点にある。Go と Bubble Tea フレームワークを用いた「vibe-coded」アプローチで 30 週間週末にわたり開発を進めたチームは、7 ヶ月間で 234 コミットを実現したにもかかわらず、深刻な構造的欠陥が蓄積しており、最終的にこの作業の約 70% が破棄された。これには `model.go` に収められたコード行を約 1,690 行も含まれている。プロジェクトは以下の 5 つの批判的アーキテクチャ上の失敗に直面した:AI がシステム不変則を無視し(結果として散在する `nil` 代入が発生)、キーハンドリングが地獄のように困難になる「神オブジェクト」と単一構造体設計に依存した、GPU に焦点を当てた範囲を超えた機能の蔓延を引き起こす「速度の幻想」におびやかされた、構造化データを不安全な位置指定式配列へと平坦化したこと、そして goroutine から直接の状態変異を許容しチャンネルを用いなかったことを通じて状態遷移を誤って扱った。将来の失敗を防ぐため、このプロジェクトはシステムを Rust で再実装中である。この移行により厳密な所有ルールが強制され、コーディング前にアーキテクチャ(インタフェース、メッセージ型など)を明示的に設計することが求められ、AI の支援が長期的な構造的完全性を損なうのではなく支えるように確保される。 ## Text to translate: **Improved Summary:** The primary lesson from building k10s—a GPU-aware Kubernetes dashboard for NVIDIA cluster operators—is that while AI excels at rapid feature delivery, it frequently fails at system architecture, leading to a codebase prone to collapse. Using a "vibe-coded" approach with Go and the Bubble Tea framework over 30 weekends, the team accumulated deep structural flaws despite making 234 commits in seven months; ultimately, ~70% of this work was discarded, including approximately 1,690 lines of code in `model.go`. The project faced five critical architectural failures: AI ignored system invariants (leading to scattered `nil` assignments), defaulted to a "god object" single-struct design making key handling a nightmare, succumbed to the "velocity illusion" causing feature creep beyond the GPU focus, flattened structured data into unsafe positional arrays, and mishandled state transitions by allowing direct mutations from goroutines instead of using channels. To prevent future failure, the project is rewriting the system in Rust. This transition enforces strict ownership rules and requires designing architecture (interfaces, message types) explicitly before coding, ensuring AI assistance supports rather than undermines long-term structural integrity.

2026/05/11 2:43

インシデントレポート:CVE-2024-YIKES

## Japanese Translation: ソースコードのサプライチェーン攻撃は、`left-justify`(週ごとのダウンロード数が 8.47 億回)という侵害された JavaScript の依存関係に起因し、その結果、Python ツールの `snekpack` を介して数百万人の開発者に影響を及ぼしました。`snekpack` は、悪意のあるライブラリ `vulpine-lz4` を統合した後にマルウェアを配布しました。このインシデントは Day 1 に発生し、Google AI Overviews で提示されたフィッシングリンクに引っかかり、 maintainer の Marcus Chen が被害にあうことで始まり、複数パッケージレジストリ(`.npmrc`、`.pypirc`、Cargo、Gem の認証情報)の認証情報が漏洩し、引渡条約のない国にあるサーバーに到達しました。当初、「Critical」から「Catastrophic」と評価が変更されたものの、Day 3 に関連性の/crypto マining ウォーム (`cryptobro-9000`) が誤って脆弱なマシンを `snekpack` のアップグレードによってパッチ適用したため、「Somehow Fine」と宣言されました。 攻撃チェーンには以下が含まれていました: - 悪意のある `vulpine-lz4` ビルドスクリプトは、ホスト名がトリガー(例:"build"、"ci")に一致する場合マルウェアを実行しました。 - 不正なアップデートでは、reverse shells が Tue デイのみ有効になるように、そしてデフォルトシェルを `fish` に変更するなどの機能を追加されました。 - 企業大手(Fortune 500 社)はソーシャルメディアを通じて認識し、ある VP はマウイ島でこの事実に気づきました。 インシデントは Day 3 の 15:22 UTC に解決され、CVE-2024-YIKES は Week 6 に割り当てられ、ウォームによって約 420 万台の_MACHINE_ が救助された(ただしその C2 サーバーも侵害されていた)と推定されます。根本原因には、弱いレジストリ認証、AI 生成のフィッシングリンク、不十分な CI/CD の衛生管理があり、ユーモラスに「犬が Kubernetes を食べ、YubiKey が失われた」という形で表現されました。 是正措置には、`vulpine-lz4` のリファクタリング(Rust に書き直し)、アーティファクト署名の実装(2022 年第 3 四半期からバックログされていた)、強制的な MFA の導入、847 の推移的依存関係の監査が含まれます。このインシデントは、自動化されたビルドパイプラインにおける重要なギャップと、将来の攻撃を防止するための厳格な依存関係監査の必要性を示しています。

接続初回時に発生する MitM(中間者攻撃)検知の回避方法について、VPS やあらゆるクラウドプロバイダーで一般的な設定手順と注意点を以下にまとめます。 - **原因**: OpenSSH のデフォルト設定では、リモートホストの公開鍵がローカルの `known_hosts` ファイルの内容と一致しない場合、「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!(または類似するメッセージ)/ MitM attack potentially in progress」と表示されます。これは重要なセキュリティ機能ですが、新規接続時や IP アドレス変更時などに誤検知が生じる可能性があります。 - **対策方法**: - リモートホストの正しい公開鍵を手動または自動登録ツールを利用して `known_hosts` ファイルに追加する。 - 「Host key checking」を無効にする設定(例:`StrictHostKeyChecking no`)を行う場合は、セキュリティリスクが高まるため非常に慎重に取扱いください。 - **設定変更手順**(`~/.ssh/config` の編集): ```bash echo "Host * StrictHostKeyChecking no" >> ~/.ssh/config ``` その後、SSH コネクショングリフを再度試してください。 - **注意点**: 公開鍵検証の無効化はセキュリティ上の重大な弱点となりますので、信頼できる環境でのみ実施すること強くお勧めします。 | そっか~ニュース