Bash段階の難読化の説明
- xz/liblzmaでバックドアが発見された。OpenSSHサーバーに影響する。
- バックドアが含まれたバイナリよりも、初期のbash部分と、そこで使われた単純だが巧妙な難読化手法に注目する。
- この記事は、bash段階がどのように難読化され、抽出されるのかを説明するもの。
始める前に
- xz/liblzmaの2つのバージョン(5.6.0と5.6.1)が影響を受ける。細かな違いがある。
- bash部分は3段階(あるいは4段階?)に分かれており、各段階をStage 0からStage 2と命名する。
- "Stage 3"についても触れる予定だが、まだ完全には実装されていない可能性がある。
- 難読化/暗号化された段階と、その後のバイナリバックドアは2つのテストファイルに隠されている。
Stage 0
- m4/build-to-host.m4ファイルから始まる。このコードはビルド工程のどこかで実行され、Stage 1スクリプトを抽出する。
- テストファイルからバイトを読み取り、標準出力に渡し、
trコマンドを使って文字を別の文字へマッピングする。
Stage 1
- "####Hello####"で始まるbashファイル。Linux上でのみ実行されるようになっている。
evalを使ってconfig.statusからsrcdirを抽出し、特定のバイトをスキップして出力する複雑なheadコマンドの連鎖を含む。
trコマンドを使って単純な換字式暗号を適用し、xzコマンドで展開してから実行する。
Stage 2
- Stage 2は実際のコンパイル工程を変更するbashスクリプト。
- "拡張/パッチ"システムがあるように見え、テストファイルを継続的に変更しなくても新しいスクリプトを実行できるようにしている。
.oファイルを抽出してコンパイル/リンク工程に統合するコードが含まれる。
要約
- このプロセスは非常に巧妙に隠されており、標準的なコマンドラインツールだけを使って複雑に構成されている。
- 3段階の実行と"拡張"システムによって将来に備え、バイナリテストファイルを再び変更する必要がないよう設計されている。
- このような攻撃が偶然発見されたという事実は、セキュリティコミュニティに多くの疑問を残す。
GN⁺の意見
- この記事は、ソフトウェアセキュリティとサプライチェーン攻撃の重要性を強調している。ソフトウェアのビルド工程で発生しうる脆弱性を認識し、コードレビューとセキュリティ監査の重要性を改めて思い起こさせる。
- 難読化技術とマルチステージ攻撃手法は、攻撃者がどれほど巧妙にシステムへ侵入できるかを示している。こうした技術はセキュリティ専門家にとっても教育的価値がある。
- 似た機能を提供する他のセキュリティツールやプロジェクトとしては、OWASPのDependency-CheckやSonatypeのNexus Platformがある。これらはソフトウェア依存関係のセキュリティ脆弱性を特定するのに役立つ。
- この技術を導入する際には、ソフトウェアサプライチェーンのあらゆる段階でセキュリティを強化する必要がある。これによる利点はシステムの安全性を高めることだが、欠点は攻撃者がこのような方法を使った場合に検知が難しくなる可能性がある点である。
- この事件は、オープンソースコミュニティの強みと弱みの両方を浮き彫りにしている。コミュニティベースのレビューと貢献はプロジェクトの成長とセキュリティに重要だが、同時に悪意ある貢献者によるリスクも存在する。
まだコメントはありません。