ホワイトハッカーの知識
はじめてのアセンブラプログラムを作成してみませんか。
なぜハッカー(倫理的なエクスプロイト開発者)は64ビットのアセンブラを学ぶのか
エクスプロイト開発では、バイナリの脆弱性を理解し、悪用できるかどうかを検証するために、低レベルの知識が不可欠です。その中で、64ビットアセンブラ(x86_64アセンブラ)を学ぶ理由は以下の通りです。
1.近年のシステムの大半が64ビット化している。
ほとんどのOS(Windows, Linux, macOS)は64ビットアーキテクチャが標準になっている。
32ビットのバイナリが少なくなり、64ビットの解析が主流になります。
2.エクスプロイト開発でのバイナリ解析とROP攻撃
64ビットのレジスタやスタック管理の仕組みを理解する必要がある。
Return-Oriented Programming (ROP) などの攻撃手法を学ぶ際、64ビット特有のリターンアドレス制御が重要になります。
3.OSとCPUのセキュリティメカニズムを理解する
ASLR(アドレス空間配置のランダム化)やDEP(データ実行防止)を回避する技術を理解や、64ビット特有のカーネルエクスプロイトを学ぶ必要があります。
64ビットアセンブラの開発環境について
私のサイトではホワイトハッカー標準の「Kali Linux」を用いてのアセンブラの開発環境を作成します。
Kali Linuxをインストールされていない方は、こちらをご覧ください。
仮想環境(VirtualBox 7.1)にKali Linux 2024.3をインストール手順
64ビットアセンブラのプログラムを開発するには、以下の環境が必要になります。
1.NASM(Netwide Assembler)
x86_64向けのアセンブラ
2.GCC
アセンブリコードをリンクするためのコンパイラ
3.GDB(GNU Debugger)
デバッグツール
4.objdump, strace, ltrace
バイナリ解析ツール
インストールの方法
1.既存のソフトウェアのうちアップデート可能な情報をダウンロードします。
※確認の為、パスワードを入力します。
2.x86およびx86-64アーキテクチャ向けのアセンブラ(nasm)、コンパイル・リンク(gcc)、デバッグ(gdb) のためのツールをインストールします。
sudo apt install -y nasm gcc gdb
これでアセンブラの環境が作成できました。
64ビットアセンブラの簡単なプログラムを作成して実行
ここでは、Linuxで"Hello, world!"を出力する最小のアセンブリコードを作成して、実行します。
1.アセンブラの作業フォルダを作成します。
おすすめの作業フォルダーは、ホームディレクトリ配下に作成します。
ホームディレクトリ(/home/<ユーザー名>/asm)
/home/<ユーザー名>/asm
ユーザー名はログイン時の名前です。
私の場合は"kali"であるので
2.アセンブラの作業フォルダの作成が完了しました。
作業フォルダに移動します。
※作業フォルダに移動が完了しました。
3.アセンブラプログラムを作成します。エディターは「nano」で作成します。
※viエディターでも構いませんよ。
「nanoエディター」を起動します。
"nano"と入力してEnterキーを押下します。
4.「nanoエディター」が立ち上がりました。
5.初めてのアセンブラプログラムですね。
以下のコードを入力してください。
section .data
msg db "Hello, world!", 0xA ; メッセージ(改行付き)
len equ $ - msg ; メッセージの長さ
section .text
global _start
_start:
mov rax, 1 ; sys_write (システムコール 1)
mov rdi, 1 ; 標準出力 (ファイルディスクリプタ 1)
mov rsi, msg ; メッセージのアドレス
mov rdx, len ; メッセージの長さ
syscall ; システムコール呼び出し
mov rax, 60 ; sys_exit (システムコール 60)
xor rdi, rdi ; ステータス 0(正常終了)
syscall ; システムコール呼び出し
6.ファイル名を"hello.asm"にして保存します。
保存の方法は、nanoエディターで、ctrl + O です。
7.保存するファイル名を聞いてきますので
"hello.asm"と入力してEnterキーを押下します。
8.nanoエディターを終了します。
ctrl + X
9.作成したファイルを確認します。
10.ついでに、作成したプログラムを確認してみましょう。
11.NASM(Netwide Assembler)を使ってアセンブリコード(hello.asm)をコンパイルし、オブジェクトファイル(hello.o)を生成します。
nasm -f elf64 hello.asm -o hello.o
12.オブジェクトファイル(hello.o)をリンカを使って実行可能ファイル(hello)を作成します。
13.作成したアセンブラプログラムを実行します。
ごくろうさまでした。
これで、初めてのアセンブラプログラムを作成して、実行できました。
参考書籍
現在、64ビットのアセンブラ(x86-64)の記述のある書籍は
ボリューム満点です。(^^;;
ハッカー(倫理的なエクスプロイト開発者)は、なぜアセンブラ言語を学ぶ必要があるのでしょうか。理由と、アセンブラの開発環境、簡単なプログラム作成して実行をしてみましょうのまとめ
倫理的なエクスプロイト開発者が64ビットアセンブラを学ぶ理由は、最新のシステム環境に適応し、脆弱性を深く理解するためです。
近年のOSは64ビットが主流であり、バイナリ解析やROP攻撃を行うには64ビットのレジスタやメモリ管理の知識が不可欠です。
また、ASLRやDEPなどのセキュリティ機構を解析・回避する技術を学ぶためにも、低レベルのアセンブリ言語が重要になります。
特にカーネルエクスプロイト開発では、システムコールやスタック管理の理解が必要です。エクスプロイト開発を行う上で、64ビットアセンブラの知識は倫理的なエクスプロイト開発者(Ethical Exploit Developer)は必須スキルとなると考えます。
倫理的なエクスプロイト開発を目指すなら、まずはこのような基本のプログラムから学び、動作をしっかり理解することが重要になります。