但是,我不想更改服务器上数据库中的任何内容,我不希望脚本继续进行邮寄东西等。基本上,脚本应该与世界完全分开,但是我确实想看看它试图做什么。因此,例如,当脚本运行
mail()
函数时,我想看看如果脚本与世界没有分离,将会发送一封邮件。因此,我需要一个副本服务器安装(Ubuntu Server 12.04),这并不难。困难的部分是我需要一个像外部环境一样运作的系统,但实际上是一个日志系统,在其中我可以看到正在发生的事情。
是否有任何工具可以做到这一点?如果没有,我应该如何自己构建它?
#1 楼
我建议使用虚拟机来测试您的样本。如果该示例将与其他计算机交互(例如,如果它发送邮件,但邮件服务器位于mail.example.com),则您可能希望模拟两台计算机的设置。如果要在其上运行示例的计算机上已经配置了所有内容(因此在本地进行邮件呼叫),则可能只需要一个虚拟机。设置仅虚拟机主机网络
如果有,请使用VMWare,也可以使用免费的VirtualBox。如果使用仅主机的网络(VMWare或VirtualBox说明),则可以从主机内部嗅探VM的网络流量,但流量永远不会离开主机。
运行示例之前,
如果您怀疑此php脚本会更改虚拟机的状态(例如,它将删除数据库或覆盖文件),然后建议您进行快照。这样,您始终可以还原脚本运行时所做的任何更改。 VMWare或VirtualBox说明。
运行示例
虚拟网络建立后,您就可以运行示例,同时使用Wireshark之类的工具捕获流量。这将捕获所有网络流量
获取外部反馈
正如您所描述的,您的示例可能不需要与假服务进行通信,但是如果这样做,您可以查看以下一些应用程序如Mick所述,Windows
Windows
FakeNet,如果您在Windows XP SP3上运行,这是一个很好的解决方案。
Linux
inetsim-这将模拟对应用程序级别协议(例如HTTP,TCP或SMTP)的响应。它也可以回复DNS请求。它还可以回复DNS请求。
farpd-如果您不知道将要请求的IP地址,此实用程序将非常有用。此应用程序可用于将IP通信重定向到您的虚拟机。
#2 楼
您可能可以使用开源FakeNet来模拟真实网络。但是,FakeNet旨在在XP SP3系统上运行,因此使用FakeNet将需要您确保流量从Ubuntu系统/ VM路由到XP sp3系统/VM。
可能有一些基于Linux的FakeNet替代品,但是在分析Windows恶意软件之前,我已经使用过FakeNet,并且效果很好。
支持DNS,HTTP和SSL
HTTP服务器始终提供文件并尝试提供有意义的文件;如果恶意软件要求提供.jpg,则将提供格式正确的.jpg等。提供的文件是用户可配置的。
能够将所有流量重定向到本地主机,包括发往硬编码IP地址的流量。
Python扩展,包括一个示例扩展,该扩展实现了SSL上的SMTP和SMTP。
具有为本地主机上的数据包创建捕获文件(.pcap)的功能。任何端口上的流量,自动检测和解密SSL流量并将内容显示到控制台。
#3 楼
一个更通用的解决方案是使用runkit之类的东西,它是PHP扩展来拦截任意函数调用。如果您不想知道一个完整的功能集而不想调用一个网络,而不是尝试模拟一个网络(这是您所处环境的更安全的选择),则可以简单地对每个函数进行记录来代替。评论
这种方法的缺点是您必须预先定义要捕获的内容,而这些可能是您事先可能不知道的。
– amccormack
13年3月28日在15:17
#4 楼
既然您已经有了源文件,那么我相信有一种更简单的方法(与在较低级别重新路由网络流量相比,是拦截被调用的方法。)首先,识别并确定替换php文件中的方法(请记住要进行复制!)。例如,如果要拦截
mail()
,则可以找到mail(
并将其替换为shim_mail(
。您也可以对其他有趣的方法执行此操作,例如mysql_connect()
。 完成后,在文件顶部添加
include 'shim.php';
。 “ shim”将充当php脚本和实际方法之间的一层,因此您可以选择将其记录到文本文件中,允许其执行,甚至将其指向副本数据库!shim.php
$logfile = 'log.txt';
function shim_mysql_connect($server, $username, $password, $new_link = false, $client_flags = 0)
{
file_put_contents($logfile, file_get_contents($logfile) . "\r\nmysql_connect() to " . $server . " with username " . $username . " and password " . $password);
// intercept the command and point it to the 'honeypot'
return mysql_connect('your_new_server', 'username', 'password');
}
function shim_mail($to, $subject, $message, $additional_headers = '', $additional_parameters = '')
{
file_put_contents($logfile, file_get_contents($logfile) . "\r\nmail() to " . $to . " with subject " . $subject . " and message " . $message);
// don't actually send an email
}
?>
在此shim文件中,您可以添加要查找的功能(只需通过复制与原始文件相同的方法签名并打印相关日志)。通过观察日志,您可能可以找到有关php脚本的更多信息!我的方法有一点优势,即无需添加新的依赖项就更简单,但runkit听起来更正确。无论哪种方法,您都可以选择一个可行的方法!)
评论
这项技术的简单性值得注意。
– amccormack
13年3月28日在15:16
此技术还不够。 php.net/manual/en/functions.variable-functions.php
–迈克尔·安德森(Michael Anderson)
13年3月28日在16:25
评论
这里是否需要软件标签? meta.reverseengineering.stackexchange.com/q/3/189@AshRj我将其删除。