【注意】このサイトに記載されていることを他人に試すことは「不正アクセス禁止法」に該当する場合があります。詳しくはこちらから

ハッカー(倫理的なエクスプロイト開発者)は、なぜアセンブラ言語を学ぶ必要があるのでしょうか。理由と、アセンブラの開発環境、簡単なプログラム作成して実行をしてみましょう

ホワイトハッカーの知識

はじめてのアセンブラプログラムを作成してみませんか。

なぜハッカー(倫理的なエクスプロイト開発者)は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.既存のソフトウェアのうちアップデート可能な情報をダウンロードします。
sudo apt update
※確認の為、パスワードを入力します。
 
2.x86およびx86-64アーキテクチャ向けのアセンブラ(nasm)、コンパイル・リンク(gcc)、デバッグ(gdb) のためのツールをインストールします。
sudo apt install -y nasm gcc gdb
 これでアセンブラの環境が作成できました。
 
 

64ビットアセンブラの簡単なプログラムを作成して実行

ここでは、Linuxで"Hello, world!"を出力する最小のアセンブリコードを作成して、実行します。
 
1.アセンブラの作業フォルダを作成します。
おすすめの作業フォルダーは、ホームディレクトリ配下に作成します。
 
ホームディレクトリ(/home/<ユーザー名>/asm)
/home/<ユーザー名>/asm
ユーザー名はログイン時の名前です。
私の場合は"kali"であるので
mkdir -p /home/kali/asm
 
2.アセンブラの作業フォルダの作成が完了しました。
作業フォルダに移動します。
cd /home/kali/asm
 
※作業フォルダに移動が完了しました。
 
3.アセンブラプログラムを作成します。エディターは「nano」で作成します。
※viエディターでも構いませんよ。
 
「nanoエディター」を起動します。
"nano"と入力してEnterキーを押下します。
nano
 
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.作成したファイルを確認します。
ls
 
10.ついでに、作成したプログラムを確認してみましょう。
cat hello.asm
 
11.NASM(Netwide Assembler)を使ってアセンブリコード(hello.asm)をコンパイルし、オブジェクトファイル(hello.o)を生成します。
nasm -f elf64 hello.asm -o hello.o
 
12.オブジェクトファイル(hello.o)をリンカを使って実行可能ファイル(hello)を作成します。
ld hello.o -o hello
 
13.作成したアセンブラプログラムを実行します。
./hello
 
ごくろうさまでした。
これで、初めてのアセンブラプログラムを作成して、実行できました。
 

参考書籍

現在、64ビットのアセンブラ(x86-64)の記述のある書籍は
 ボリューム満点です。(^^;;
 
 

ハッカー(倫理的なエクスプロイト開発者)は、なぜアセンブラ言語を学ぶ必要があるのでしょうか。理由と、アセンブラの開発環境、簡単なプログラム作成して実行をしてみましょうのまとめ

 倫理的なエクスプロイト開発者が64ビットアセンブラを学ぶ理由は、最新のシステム環境に適応し、脆弱性を深く理解するためです。
 
近年のOSは64ビットが主流であり、バイナリ解析やROP攻撃を行うには64ビットのレジスタやメモリ管理の知識が不可欠です。
また、ASLRやDEPなどのセキュリティ機構を解析・回避する技術を学ぶためにも、低レベルのアセンブリ言語が重要になります。
 
特にカーネルエクスプロイト開発では、システムコールやスタック管理の理解が必要です。エクスプロイト開発を行う上で、64ビットアセンブラの知識は倫理的なエクスプロイト開発者(Ethical Exploit Developer)は必須スキルとなると考えます。
 
倫理的なエクスプロイト開発を目指すなら、まずはこのような基本のプログラムから学び、動作をしっかり理解することが重要になります。