0×01 研讨布景
在剖析了俄罗斯人被曝光的几个银行木马的源码后,发现其大多均存在经过绑架浏览器数据包来获取用户个人信息的模块,经过截获浏览器内存中加密前或解密后的数据包来得到数据包的明文数据。在Defcon 23被发布的东西NetRipper具有了以上歹意银行木马的这一才能,其开源的代码结构明晰,易于扩展,研讨该东西关于研讨该类歹意行为很有含义。其github地址在【github】 ,作者还供给了metasploit和powershell版别的运用模块,本文将剖析其不同版别模块均会用到的c++代码完成的中心部分。
0×02 NetRipper东西归纳
该开源东西完成的功用,主要是经过Hook进程的 *** 函数要害点(封包加密之前与封包解密之后的 *** 函数)来绑架客户端程序的明文数据。其间包含了许多干流客户端,例如:Chrome,Firefox,IE,WinSCP,Putty以及一些代码库中供给的 *** 封包加解密函数接口,依据函数接口的函数性质来分的话,能够分为“未导出的函数接口”和“导出的函数接口”。其间Chrome,Putty,SecureCrt以及WinSCP中的 *** 加解密接口是归于UnExported,需求经过逆向工程来找到其Signature的方位,然后经过HOOK绑架;例如Mozilla Firefox运用了nss3.dll和nspr4.dll这两个模块中的加解密函数,nss3.dll中导出了PR_Read,PR_Write以及PR_GetDescType,后者导出了PR_Send和PR_Recv。其他的例如ncrypt.dll、secur32.dll和ssh2core73u.dll等。
还有对winsock2下的一般 *** 传输函数进行Hook来直接获取到一些未加密的信息。
关于未导出函数hook的处理需求先找出hook点,这比hook已知导出函数的进程杂乱许多,首要需求经过逆向剖析进程的收发包进程来找到要害点(加密前与解密后的数据包处理的函数接口)。例如,关于chrome/putty/winscp进程是需求这样做的,能够经过其开源的代码作为辅佐剖析,首要找到其 *** 函数的Signature,HOOK之前在进程的内存空间中搜索其所在地址:
伴随着软件的晋级与安全维护的增强,或许明文层次上的收发包函数会有一些改变,那么NetRipper代码就需求修改去习惯这些改变,从头调试剖析找到对应的Signature,从而从头设置Hook点。
以putty为例来验证下:
运用CE查找发送函数的标识,方位在0x00408AD7。
IDA中显现 Sub_408ad7这个函数的原型界说与代码中声明是共同的:
至于怎么调试找出未导出函数的HOOK点,这方面的内容较多,下一篇文章详细剖析。关于putty和winscp客户端,由于均已开源,能够参阅其开源的代码;关于chrome,那就需求逆向调试程序来定位HOOK点了。
0×03 Hook的偏移地址核算
E8 XXXXXXXX
其间XXXXXXXX = 方针地址 – 原始地址 – 5
举个比如,OD加载calc.exe:
指令中的偏移地址:0xFFFF99EB
方针地址:0x6c768
当时指令地址:0x72d78
核算公式:0xFFFFFFFF – ( 0x72d78 + 5 – 0x6c768 ) = 0xFFFF99eb
QA1:为什么需求运用0xFFFFFFFF减去偏移值呢?
[1] [2] 黑客接单网
在JavaScript中,你的方法是运用名为web worker的东西。 这些web worker与你在其他言语中运用的线程略有不同。 默许状况下,它们不同享内存。 实践上,有一个Envoy含糊测验方...
Completed NSE at 17:02, 0.00s elapsed可是这种办法并非满有把握,由于Referer的值是由浏览器供给的,关于某些浏览器,能够运用一些办法来篡改Referer值。...
尽管gRPC的API Fuzzer并没有运用libFuzzer的自界说mutator或protobuf,可是,它仍然是针对有状况API的含糊测验的一个很好的简略示例。 在这里,Fuzzer会运用字节数...
暗码学具有各种长处,包含信息的机密性。可是,过度依靠暗码学来维护运用程序是一个坏主意。今日咱们就经过一个事例研讨,来认识一下经过加密的有用载荷辨认和运用SQL注入缝隙。 SQL注入或许很多人都知道或许...
总的来说,咱们所发现的感染状况可以分为两类,这也就意味着进犯者在侵略方针站点的过程中,或许会运用两种不同的感染载体。 Fuzz成果:经过1.e这种特别的数值方法,可成功绕过union select防护...