バッファオーバーフロー攻撃

Posted on 2012年8月6日

バッファオーバーフロー攻撃は、想定以上のデータを
送りこんで、バッファをあふれさせ、リターンアドレスの
内容を上書きしてプログラムを暴走させるものです。
もっと質が悪いものは、本来のリターンアドレスとは異なる
任意のプログラムを実行できるようにしてしまいます。
もちろんその大部分は悪意満載プログラムです。

バッファオーバーフロー攻撃に有効な手段として
Excec-Shieldがあります。(万能ではないけど・・・)
Exec-Shieldは、(主に)スタックセグメントの実行権を
外すことで、リターンアドレスが上書きされても、任意の
コードを実行できないようにしたり、プログラムが
実行されるたびに、セグメントの配置をランダムに
置き換えることで、マッピング情報を知りえることを
格段に困難にして防いでいます。

で、なんでこんなこと書いているかというと、
昔と違って現在のFedoraは、ディフォルトでExec-Shieldが
有効になっているので、特に意識することはないのですが、
パッケージじゃなく、ソースからコンパイルしたものは
どぉなってるんだろうと、ふと気になって調べたからです。

ソースからコンパイルした【clamav】の設定は

# execstack -q /usr/local/sbin/clamd
– /usr/local/sbin/clamd

ちゃんと有効になってました。
有効になっていなければ、

X /usr/local/sbin/clamd

となります。

ついでなので、パッケージ(RPM)でインストしたものも
調べると、【amavisd-new】で引っかかりました。

/sbin/amavisd” is not an ELF file

というエラーです。一応

# readelf -h /sbin/amavisd

で調べると

readelf: Error: Unable to read in 0x2d2d bytes of section headers
readelf: Error: Not an ELF file – it has the wrong magic bytes at the start

こんな風にでましたぁ。。。
このコマンドは、ELFのバイナリに含まれるヘッダ情報を
表示させるもので、例えばフォーマットがELFなら

# readelf -h /usr/local/sbin/clamd
ELF Header:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
Class: ELF64
Data: 2’s complement, little endian
Version: 1 (current)
OS/ABI: UNIX – System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: Advanced Micro Devices X86-64
Version: 0x1
Entry point address: 0x404968
Start of program headers: 64 (bytes into file)
Start of section headers: 471496 (bytes into file)
Flags: 0x0
Size of this header: 64 (bytes)
Size of program headers: 56 (bytes)
Number of program headers: 8
Size of section headers: 64 (bytes)
Number of section headers: 37
Section header string table index: 34

こんな感じです。
ま、フォーマットがELFじゃなきゃしょぉがないか・・・
って、すぐ見切りをつけるのが良いところです!???

HOME