ELFバイナリファイルシグネチャ — マジックバイト
ELF(Executable and Linkable Format)マジックバイト 7F 45 4C 46 を理解します。hexでLinux実行可能ファイル、共有ライブラリ、オブジェクトファイルを識別する方法を学びます。
Hex
7F 45 4C 46
ASCII
.ELF
詳細な説明
ELF(Executable and Linkable Format)ファイルシグネチャは、4バイトシーケンス7F 45 4C 46です。これはDEL文字(0x7F)に続いてASCII文字"ELF"が来ます。Linux、BSD、Solaris、その他多くのUnix系オペレーティングシステムにおける実行可能ファイル、共有ライブラリ、オブジェクトファイル、コアダンプの標準バイナリ形式です。
バイトごとの内訳:
| オフセット | Hex | 意味 |
|---|---|---|
| 0 | 7F |
DEL文字(非印字)— ファイルがテキストスクリプトとして誤って実行されるのを防ぐ |
| 1 | 45 |
ASCII 'E' |
| 2 | 4C |
ASCII 'L' |
| 3 | 46 |
ASCII 'F' |
マジックバイト後のELFヘッダーフィールド:
シグネチャに続くバイトには、バイナリに関する重要な情報が含まれます:
| オフセット | サイズ | フィールド | 一般的な値 |
|---|---|---|---|
| 4 | 1バイト | クラス | 01 = 32ビット、02 = 64ビット |
| 5 | 1バイト | エンディアン | 01 = リトルエンディアン、02 = ビッグエンディアン |
| 6 | 1バイト | ELFバージョン | 01 = 現行 |
| 7 | 1バイト | OS/ABI | 00 = System V、03 = Linux、09 = FreeBSD |
| 8-15 | 8バイト | パディング | 通常すべてゼロ |
| 16-17 | 2バイト | オブジェクトタイプ | 02 00 = 実行可能、03 00 = 共有オブジェクト |
| 18-19 | 2バイト | マシン | 3E 00 = x86-64、B7 00 = AArch64 |
典型的なLinux実行可能ファイルヘッダーの読み取り:
標準的な64ビットx86_64 Linux実行可能ファイルは以下で始まります:
7F 45 4C 46 02 01 01 00 00 00 00 00 00 00 00 00
02 00 3E 00 01 00 00 00
これは次を示します: ELFマジック、64ビット、リトルエンディアン、バージョン1、System V ABI、実行可能タイプ、x86-64アーキテクチャ。
ELFファイルの種類:
オフセット16のタイプフィールドは、調べているELFファイルの種類を明らかにします:
01 00— リロケータブルオブジェクトファイル(.o)— リンク前のコンパイラ出力02 00— 実行可能ファイル — 直接実行可能なプログラム03 00— 共有オブジェクト(.so)— 動的ライブラリ04 00— コアダンプ — プロセスがクラッシュした際に生成
セキュリティにおける重要性:
ペネトレーションテストやマルウェア分析において、ELFバイナリの識別は重要な最初のステップです。攻撃者が非標準の拡張子(例: .txt、.jpg)で偽装したELFバイナリをアップロードする可能性があります。マジックバイトをチェックすると真のファイルタイプが即座に判明します。
ELF対他の実行可能形式:
- WindowsはPE形式を使用(マジック:
4D 5A— "MZ") - macOSはMach-O形式を使用(マジック:
FE ED FA CEまたはCF FA ED FE) - JavaはクラスファイルA使用(マジック:
CA FE BA BE)
これらのシグネチャを知ることで、未知のバイナリのターゲットプラットフォームを素早く識別できます。
ユースケース
ELFシグネチャ分析は、マルウェア検出、バイナリリバースエンジニアリング、CI/CDパイプラインでのファイルタイプ検証、Linuxシステム侵害のフォレンジック分析に使用されます。