Your SlideShare is downloading. ×
0
Hacking
Hacking
Hacking
Hacking
Hacking
Hacking
Hacking
Hacking
Hacking
Hacking
Hacking
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Hacking

799

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
799
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. • HACKING脆弱性攻撃の理論と実際
  • 2. • 概要• プログラミング• ネットワーク• 暗号学
  • 3. 語源• 1950年代MITの鉄道模型愛好会が中古の電 話機で高度な鉄道模型制御システムを作 り上げた。 →創造的な機器の使用方法を ハッキングと呼んだ
  • 4. 脆弱性の原因• 本来の意図と違う動作• オフバイワンエラー• 例)長さ100mの柵を作るために、杭を10m間隔で配置。 必要な杭の数は?• 実際に起こった事例:2002年 OpenSSH• ☓ If(id < 0 || id > channels_alloc) {• ○ If(id < 0 || id >= channels_alloc) {
  • 5. 攻撃のテクニック• バッファオーバーフロー攻撃• フォーマット文字列攻撃• どちらの攻撃も最終目的は任意のコードの実行
  • 6. マルチユーザー環境• suid:一般ユーザーが実行できるプログラムに、root権限を 持たせる仕組み。• suid権限を持つ プログラム:passwdなど$ ls -l /usr/bin/passwd-rwsr-xr-x 1 root root 23420 8月 11 2010 /usr/bin/passwd
  • 7. 低位アドレス メモリ構造 • マシン語プログラム(書き込み不可)コード領域データ領域 • 初期化された変数、文字列:実行ファイルに含まれる • 初期化されていない変数:実行時にカーネルが割り当 bss領域 てる ヒープ • 動的に割り当てられる変数(malloc, calloc) スタック • 関数呼び出し時にコンテキストを退避高位アドレス
  • 8. data領域使用 データとbssの比較 bss領域使用#include <stdio.h> #include <stdio.h>char x[20]="abcd"; char x[20];int main(){ int main(){ return 0; return 0;}$ size data bss text data bss dec hex filename 915 268 8 1191 4a7 data.out 915 248 28 1191 4a7 bss.out(コード領域 データ領域 bss領域 総メモリサイズ)$ ls -ls data bss4846 8月 28 20:13 bss.out4866 8月 28 20:13 data.out(実行ファイルのサイズ)
  • 9. アドレスの確認#include <stdio.h>#include <stdlib.h> code 804841fvoid sub(){ data 8049728 int stack; bss 8049734 printf("stack %xn",&stack); heap 836b008} stack bfb3f9c4int data=10;int bss; 低位アドレス コード領域int main(){ データ領域 int *heap; heap = (int *)malloc(1); bss領域 printf("code %xn",&main); ヒープ printf("data %xn",&data); printf("bss %xn",&bss); printf("heap %xn",heap); sub(); free(heap);} スタック 高位アドレス
  • 10. 命令実行手順• 命令実行手順 o PCのアドレスの命令をロード o PCを加算 o ロードした命令を実行 プログラムカウンタ(PC):次に実行するアドレス ベースレジスタ(BR):プログラムの先頭アドレス スタックポインタ(SP):スタックの先頭アドレス #include <stdio.h> 80483a4 X=1 int main(){ int x=1; 80483a5 X++ x++; printf("%xn",&main); PC = 80483a4 return 0; PCのアドレスから命令をロード(x=1) } PC = 80483a5 x=1を実行 $ ./a.out PCのアドレスから命令をロード(x++) 80483a4 PC=80483a6 x++を実行
  • 11. 関数呼び出しの動作• 関数呼び出し o 引数の退避 o 戻りアドレス(PC)の退避 o ベースレジスタの退避 o 関数のローカル変数領域の確保

×