读者来信
读者来信
来自 Damballa 的澄清
这封信函是关于 Grzegorz Landecki 发表在 2009 年 1 月号 Linux Journal 上的文章“检测僵尸网络”的回应,来自 Damballa 公司首席研究员 Paul Royal。—编者注。
作为 Kraken 僵尸网络的发现者,我想澄清一些关于其发现和处理的不准确之处。除了这些澄清之外,如果 Landecki 先生有兴趣进一步讨论,我欢迎就 Damballa、其流程以及 Kraken 的发现进行任何对话。
摘自 Linux Journal 文章
“简而言之,Damballa 发现(可能是在安全审计期间)一种新型恶意软件,该恶意软件带有硬编码地址(URL),用于僵尸控制服务器(CC——管理僵尸机器任务的计算机,所有受感染的计算机都向其报告)。”
Damballa 最初是通过在 DynDNS 提供商的网络上观察到的网络异常发现 Kraken 的,Damballa 与该提供商合作以关闭 C&C 服务器。Damballa 最初认为 Kraken 是 HacDef(一种 2006 年记录在案的僵尸网络使用的知名恶意软件;请参阅 www.avira.com/en/threats/section/fulldetails/id_vir/2900/bds_hacdef.fv.1.a.html),并且直到 2008 年 3 月下旬才获得 Kraken 的恶意软件样本。Damballa 仅在找到与网络异常匹配的恶意软件样本后才发现该僵尸网络不是 HacDef。业内其他人认为该僵尸网络是 Bobax,一个较旧的僵尸网络(可能是 Kraken 的祖先),这说明了新僵尸网络识别的普遍困难。
摘自文章:“Damballa 还发现,其中一些硬编码地址未在 DNS 服务中注册(该僵尸网络可能在当时进行了测试,作者正准备稍后启动它)。”
Kraken 恶意软件根本不使用硬编码域名;它会自动生成域名。ThreatExpert (blog.threatexpert.com/2008/04/kraken-changes-tactics.html) 和 TippingPoint (dvlabs.tippingpoint.com/blog/2008/04/28/owning-kraken-zombies) 都记录了用于生成域名的算法。
摘自文章:“Damballa 将这些域名注册为自己的域名,最终控制了一个相当大的僵尸网络用于研究。”
Damballa 从未“控制” Kraken;由于 Kraken 恶意软件生成域名,僵尸网络操纵者只是注册了随后将自动生成的域名(Damballa 无法全部注册),并恢复了其运行。
摘自文章:“它尚未就其发现的感染方法联系任何安全公司。”
在 2008 年 4 月初,Damballa 发布了修复 Kraken 漏洞的说明 (www.damballa.com/downloads/brochures/Kraken_Remediation.pdf) 和一份技术白皮书/行业回应 (www.damballa.com/downloads/press/Kraken_Response.pdf),其中包括 Kraken C&C 域名,公司/组织可以使用这些域名来阻止受感染的系统与 Kraken 控制服务器通信。
Damballa(他是 malfease 恶意软件存储库的共同开发者和管理者—www.malfease.oarci.net) 还与 SANS ISC (isc.sans.org/diary.html?storyid=4256) 和 OffensiveComputing (www.offensivecomputing.net/?q=node/699) 分享了恶意软件样本(研究人员/从业人员可以下载)。
摘自文章:“它尚未将所用漏洞的任何详细信息发布到任何漏洞跟踪系统,也未联系任何供应商以提醒他们注意该问题。”
Kraken 没有使用任何漏洞进行传播;没有需要联系的供应商。与 Storm 一样,Kraken 通过社会工程(电子邮件和即时消息)传播。
—
Paul Royal
技术技巧调整
我喜欢阅读技术技巧,就像我阅读 David S. Sinck 的技巧“以相同方式处理压缩和未压缩数据源”(LJ,2008 年 12 月,第 56 页)一样。以下是一些评论和建议。
我强烈建议使用双引号。所提出的解决方案会静默地忽略所有名称中带有一个或多个空格的文件。
以下行的唯一目的是
F=$(echo $1 | perl -pe 's/.gz$//')
是从文件名中删除最后一个文件扩展名。这是使用 Perl 完成的,Perl 是一种比 Bash、子shell 和管道更强大的语言的解释器。删除几个字符(在每个循环周期中!)花费了太多精力。该函数的前两行可以用参数替换来代替,这几乎不花费任何代价。因此,通过引用,我们得到以下结果
function data_source () { local F=${1%.gz} # remove file extension if [[ -f $F ]] ; then cat "${F}" elif [[ -f $F.gz ]] ; then gunzip --stdout "${F}.gz" fi } # ------- end of function data_source ------- for file in * ; do data_source "$file" | ... done
—
Fritz Mehner
每月照片
您有照片想与 LJ 读者分享吗?请将您的投稿发送至 publisher@linuxjournal.com。如果我们在杂志上刊登您的照片,我们将向您发送一件免费 T 恤。