利用IDAPro发掘和分析安全漏洞作者:watercloud日期:2003/12/25•软件安全漏洞发掘模型•软件安全漏洞发掘方法•IDAPro使用基础与IDC脚本简介•IDC在安全漏洞发掘中的应用Copyright©watercloud@xfocus.org2003安全漏洞发掘模型和方法Copyright©watercloud@xfocus.org2003安全BUG软件BUG理论基础:软件测试方法安全漏洞发掘模型和方法Copyright©watercloud@xfocus.org2003安全漏洞存在于软件的非孤立性中。数据处理中的逻辑错误。来源数据的过分依赖。DATA逻辑错误CDAB安全漏洞发掘模型和方法Copyright©watercloud@xfocus.org2003白盒测试灰盒测试黑盒测试主要针对开源系统(GNU/BSD)主要针对非开源系统(商业Unix,Windows)主要重点安全漏洞发掘模型和方法Copyright©watercloud@xfocus.org2003白盒测试黑盒测试一些自动化工具:://://自己手写一个:$exportCC=`perl–e‘print“%9000s%n%n%n”x800’`$find/-perm–u+s–execsh–c{}$CC\;安全漏洞发掘模型和方法Copyright©watercloud@xfocus.org2003静态分析自动化工具:动态分析自动化工具:安全漏洞发掘模型和方法Copyright©watercloud@xfocus.org2003常用辅助工具:静态考查:file、nm、strings、objdump、man反汇编:IDAPro、objdump、w32dsm、gdb动态跟踪:strace、lstrace、IDAPro、ollydbg动态调试:gdb、insight、softice、ollydbg、windbg安全漏洞发掘模型和方法Copyright©watercloud@xfocus.org2003安全参考技术2:Crack发现和利用软件安全漏洞发现和绕过软件保护策略安全漏洞发掘模型和方法Copyright©watercloud@xfocus.org2003IDAPro的优势:多芯片、多文件格式的支持。准确的库确定。函数参数的标注。可以看到无符号文件的库调用。可分析软件的隐藏功能。可分析无任何文档的程序。漏洞发掘方法示例Copyright©watercloud@xfocus.org20031.外部观察,了解文件类型、行为和外部接口。[cloud@rsaszzz]$filezzzzzz:setuidELF32-bitLSBexecutable,Intel80386,version1(SYSV),forGNU/Linux2.2.5,dynamicallylinked(usessharedlibs),strippedcloud@rsaszzz]$./zzzusage:./zzzstring[cloud@rsaszzz]$./zzzaafzzz(aa)=7d9dd0c79619cbcabb8f5095f61da05f©watercloud@xfocus.org20032.静态分析,看看程序用了那些外部函数:[cloud@rsaszzz]$objdump-Rzzz0804aa14R_386_JUMP_SLOTstrncat0804aa18R_386_JUMP_SLOTfileno0804aa1cR_386_JUMP_SLOTfprintf0804aa20R_386_JUMP_SLOTgetenv0804aa24R_386_JUMP_SLOTsystem0804aa28R_386_JUMP_SLOTsetresuid0804aa2cR_386_JUMP_SLOTfchmod0804aa38R_386_JUMP_SLOTstrcat0804aa3cR_386_JUMP_SLOTprintf0804aa40R_386_JUMP_SLOTgetuid0804aa44R_386_JUMP_SLOTsetreuid0804aa48R_386_JUMP_SLOTgetpwnam0804aa4cR_386_JUMP_SLOTexit0804aa50R_386_JUMP_SLOTmemset0804aa54R_386_JUMP_SLOTstrncpy0804aa58R_386_JUMP_SLOTfopen0804aa5cR_386_JUMP_SLOTsprintf0804aa60R_386_JUMP_SLOTgeteuid0804aa64R_386_JUMP_SLOTstrcpy....可以看到有了我们感兴趣的:溢出:strcpy、sprintf、strcat、(strncpy、strncat也可能导致溢出)格式串:printf、sprintf执行外部命令:system+setreuid/setresuid有可能高权限执行我们的命令。外部接口:getenv、fopen、fprintf。条件竞争:fchmod疑虑问题:setresuid/setreuid到底把权限去掉了还是设高了还是设低了?联系的是同时出现了getuid,geteuid。漏洞发掘方法示例Copyright©watercloud@xfocus.org20033.静态考查更多的外部接口有getenv,那么到底getenv了哪些内容,fopen又打开了哪个个文件?[cloud@rsaszzz]$stringszzz/lib/ld-linux.so.2....usage:./zzzstringfzzz()=%02xfzzz=ERR:stringtoolong.LOGNAMELOGFILElogfile=%sLOGPATHok:rootuser!ps-ef|sed's/r.*t//g'|awk'{print$1}'我们看到了感兴趣的:LOGNAMELOGFILELOGPATHok:rootuser!ps-ef|sed's/r.*t//g'|awk'{print$1}'漏洞发掘方法示例Copyright©watercloud@xfocus.org20034.用ida反汇编,静态考查我们以上发现的兴趣点:.text:0804940EpushoffsetaLogname;LOGNAME.text:08049413call_getenv.text:08049418addesp,4.text:0804941Bmovdword_804A924,eax.text:08049420pushoffsetaLogfile;LOGFILE.text:08049425call_getenv.text:0804942Aaddesp,4.text:0804973Eaddesp,8.text:08049741pushoffsetaLogname;LOGNAME.text:08049746call_getenv.text:0804974Baddesp,4.text:0804974Emov[ebp-10h],eax.text:08049751pushoffsetaPsEfSedSR_TGAw;ps-ef|sed's/r.*t//g'|awk'{print$1....text:08049756call_system.text:0804975Baddesp,4深入看看我们可以发现调用system的函数在整个程序中没有被调用过简单看了一下main函数开始部分没有见到取消程序特权的调用漏洞发掘方法示例Copyright©watercloud@xfocus.org20035.在以上静态分析基础上动态考查我们发现的兴趣点:(1).是否有溢出、格式串等问题。考查依据是处理外部输入错误时将会Segmentationfault之类的信息。[cloud@rsaszzz]$./zzz`perl-e'printAx24'`fzzz(AAAAAAAAAAAAAAAAAAAAAAAA)=ff605f02a57b3ae6f8c4cefded2c3c73?卡[?磕??Segmentationfault再用lstrace追踪一下可以很快明确这是单字节溢出。(2).动态和静态结合分析文件操作LOGFILE环境变量可以用特权身份追加文件内容:[cloud@rsaszzz]$exportLOGFILE=kk[cloud@rsaszzz]$./zzzddfzzz(dd)=5f3f6275e5a875a3de8cd6155fce81b7[cloud@rsaszzz]$ls-lkkcloud-rwxr-xr-x1rootaurora56Nov1011:24kkcloud[cloud@rsaszzz]$catkkcloudlogfile=kkcloudfzzz=5f3f6275e5a875a3de8cd6155fce81b7漏洞发掘方法示例Copyright©watercloud@xfocus.org20035.在以上静态分析基础上动态考查我们发现的兴趣点:(1).是否有溢出、格式串等问题。考查依据是处理外部输入错误时将会Segmentationfault之类的信息。[cloud@rsaszzz]$./zzz`perl-e'printAx24'`fzzz(AAAAAAAAAAAAAAAAAAAAAAAA)=ff605f02a57b3ae6f8c4cefded2c3c73?卡[?磕??Segmentationfault再用lstrace追踪一下可以很快明确这是单字节溢出。(2).动态和静态结合分析文件操作LOGFILE环境变量可以用特权身份追加文件内容:[cloud@rsaszzz]$exportLOGFILE=kk[cloud@rsaszzz]$./zzzddfzzz(dd)=5f3f6275e5a875a3de8cd6155fce81b7[cloud@rsaszzz]$ls-lkkcloud-rwxr-xr-x1rootaurora56Nov1011:24kkcloud[cloud@rsaszzz]$catkkcloudlogfile=kkcloudfzzz=5f3f6275e5a875a3de8cd6155fce81b7漏洞发掘方法示例Copyright©watercloud@xfocus.org20035.在以上静态分析基础上动态考查我们发现的兴趣点:(1).是否有溢出、格式串等问题。考查依据是处理外部输入错误时将会Segmentationfault之类的信息。[cloud@rsaszzz]$./zzz`perl-e'printAx24'`fzzz(AAAAAAAAAAAAAAAAAAAAAAAA)=ff605f02a57b3ae6f8c4cefded2c3c73?卡[?磕??Segmentationfault再用lstrace追踪一下可以很快明确这是单字节溢出。(2).动态和静态结合分析文件操作LOGFILE环境变量可以用特权身份追加文件内容:[cloud@rsaszzz]$exportLOGFILE=kk[cloud@rsaszzz]$./zzzddfzzz(dd)=5f3f6275e5a875a3de8cd6155fce81b7[cloud@rsaszzz]$ls-lkkcloud-rwxr-xr-x1rootaurora56Nov1011:24kkcloud[cloud@rsaszzz]$catkkcloudlogfile=kkcloudf