私はCSの2年生です。C、OOPの概念、x86アーキテクチャ、リバースエンジニアリングの基本、TCP/IPスタックとOSの概念、またLinux OSが大好きです。質問が1つだけあります。 :
ARMでのバイナリの活用に飛び込む前に、Linuxカーネルを深く学び、カーネルドライバなどの低レベルのものを開発することは必須ですか?私はまったくの初心者ではありません。x86Archの非常に基本的なエクスプロイトをいくつか開発しましたが、ARMエクスプロイトでキャリアを構築したいと考えています。
ARMバイナリの悪用後に学習できますか。Linuxカーネルを実際に詳しく知らなくても、バイナリの悪用が本当に得意なときに最初の仕事を得ることができますか?
カーネル自体を悪用しない限り、バイナリの悪用にはLinuxカーネルを深く理解する必要はありません。シグナルハンドラーの登録方法、syscallの動作方法、Linuxがエクスプロイトに関連する可能性のあるプロセス固有の属性をどのように管理するかなどの基本を知っていれば十分です。 Linuxをしっかりと理解しておくことは非常に役立ちますが、Linuxカーネルinternalsを理解する必要があるという意味ではありません。ユーザースペースのバイナリを利用するために、カーネルの内部APIを調べる必要はありません。
ただし、Linuxで悪用が行われていると想定すると、Linuxを一般的に理解することは非常に役立ちます。たとえば、NX保護をバイパスするROPのような攻撃である [〜#〜] srop [〜#〜] (SigReturn-Oriented Programming)の悪用を理解するには、sigreturn()
syscallは機能します。同様に、エクスプロイトは、カーネルがすべてのプロセスに提供する共有ライブラリである vDSO を攻撃する可能性があります。