《源码审计与windows内核漏洞.pdf》由会员分享,可在线阅读,更多相关《源码审计与windows内核漏洞.pdf(32页珍藏版)》请在三个皮匠报告上搜索。
1、360代码卫士团队安全研究员源码审计与源码审计与windowswindows内核漏洞内核漏洞关于个人360代码卫士团队研究员pwn2own2017 冠军团队成员主要研究方向为windows系统和软件安全关于团队360代码卫士团队成立于2011年5月,专注于软件源代码、可执行码的漏洞分析技术研发。推出“360代码卫士”系列产品,可针对软件源代码进行安全检测和分析,包括源代码安全缺陷分析、源代码安全合规分析、开源组件安全分析等。360代码卫士可支持Windows、Linux、Android、Apple iOS、IBM AIX等平台上的源代码安全分析,支持的编程语言涵盖C/C+/C#/OC/Java
2、/JSP/JavaScript/PHP/Python/Cobol等。团队还运营着国内规模最大的开源软件源代码安全检测公益计划,该计划目前已经对2200多款开源软件进行了安全检测。网址:个人和团队介绍引子2017年6月下旬,一则新闻引爆了安全圈:“win10 32T源码泄漏”!后来新闻被证伪。为何此事会引起如此大的轰动呢?下面这个NT4源码泄漏的新闻副标题就是答案:然而对于安全研究者,这些源码又是漏洞挖掘的宝库!漏洞挖掘常用的手段有3种:Fuzz测试符号执行源码审计其中源码审计作为最基本的漏洞挖掘方法,得到的关注讨论却不多。本议题将分析几个古老的NT4源码漏洞,来看一下源码审计的威力。这些漏洞存
3、在了20几年,直到近几年内才被发现和修复!我们也相信这些古老的代码中依然隐藏着至今尚未发现的漏洞!引子CVE编号:未知发现者:Guopengfei影响系统:windows xp,windows 2003危害:拒绝服务漏洞源文件:greRfntobj.cxx漏洞年份:案例1-RFONTOBJ:vMakeInactive()堆破坏漏洞VOID RFONTOBJ:vMakeInactive()PRFONT aprfntQUICK_FACE_NAME_LINKS+4;PRFONT*pprfnt;BOOL bLockEUDC,bScratch,bAllocated;if(prfnt=NULL)|(prf
4、nt-cSelected=0)return;if(prfnt-uiNumLinks QUICK_FACE_NAME_LINKS)pprfnt=(PRFONT*)PALLOCMEM(prfnt-uiNumLinks+4)*sizeof(PRFONT),flnk);bAllocated=TRUE;elseRtlZeroMemory(VOID*)aprfnt,sizeof(aprfnt);pprfnt=aprfnt;bAllocated=FALSE;bLockEUDC=bMakeInactiveHelper(pprfnt);案例1-RFONTOBJ:vMakeInactive()堆破坏漏洞#defi
5、ne QUICK_FACE_NAME_LINKS 4分配内存,指针保存在pprfnt;bAllocaed为真while(*pprfnt!=NULL)FLINKMESSAGE(DEBUG_FONTLINK_RFONT,vMakeInactive()deactivating linked font%xn);RFONTTMPOBJ rfo(*pprfnt);rfo.bMakeInactiveHelper(PRFONT*)NULL);/next one.pprfnt+;if(bAllocated)VFREEMEM(pprfnt);if(bLockEUDC)AcquireGreResource(&gfm
6、EUDC1);if(-gcEUDCCount=0)&(gbEUDCRequest)ReleaseGreResource(&gfmEUDC2);ReleaseGreResource(&gfmEUDC1);循环自增处理每一个对象释放错误内存指针案例1-RFONTOBJ:vMakeInactive()堆破坏漏洞Poc伪代码:HWND hwnd=CreateWindow();HDC dc=GetDC(NULL);NtGdiEudcLoadUnloadLink(font1);。NtGdiEudcLoadUnloadLink(font9);HFONT hFont=CreateFont();HGDIOBJ