这是一些我很久之前写的课件,当时还年轻,写的肯定有诸多不好的地方,还请见谅

这篇文章主要是介绍了基础概念,详细的分析请关注后续

0x01 看完这篇文章之后能学会一些什么?

这篇文章看完之后就可以学会病毒及木马的分析, 化身网络安全工程师, 从此走向人生巅峰 — 这是不可能的.

这篇文章的目的只是对基础操作系统安全的普及, 来帮助大家在以后的实验和工作中避免受到恶意软件的攻击

0x02 开始之前,我们需要什么?

一点点的耐心

0x03 为什么不要使用破解版的软件?

在平时使用电脑的过程中, 可能会使用到一些绿色版或者破解版的程序, 有的时候, 它们是打好包的应用程序, 有的时候, 则是提供了一些叫做破解器的小工具

通常来说, 杀毒软件并不待见它们, 分分钟就把他们扫地出门, 但是这是为什么呢?

通常来说, 一个最简单的应用程序的注册逻辑是这样的

如果 (用户输入的注册码 等于 真正的注册码) 那么
提示注册成功并且继续执行;
否则
提升注册失败并退出

那么我们只要修改它的代码, 使它变成

如果 (用户输入的注册码 不等于 真正的注册码) 那么
提示注册成功并且继续执行;
否则
提升注册失败并退出

就可以很简单的绕过

那么杀毒软件为啥不待见他呢?

假设, 我们有一个木马, 想要盗取某个软件的账号, 原始软件的逻辑是

如果 (用户输入的密码 等于 真正的密码) 那么
提示登录成功并且继续执行;
否则
提升登录失败并退出

那么木马就可以将代码修改为

如果 (用户输入的密码 等于 真正的密码) 那么
将密码发送一份到某服务器;
提示登录成功并且继续执行;
否则
提升登录失败并退出

可以看出, 修改器和木马干的事情都差不多: 篡改应用程序的原始逻辑, 加入恶意代码

所以杀毒软件也分不出他到底做了什么,当然就杀掉啦~

当然, 这仅仅是其中的一种形式, 任何以某种方式对用户或者计算机或网络造成破坏的软件都可以被认为是恶意代码,包括计算机病毒、木马、蠕虫、内核套件、勒索软件、间谍软件等。

那么, 常见的恶意代码种类有哪些呢?

  • 后门:恶意代码将自身安装到一台计算机来允许攻击者访问,通常让攻击者只需很少认证甚至无须认证,便可连接到远程计算机,在本地系统执行命令。
  • 僵尸网络:与后门类似,允许攻击者访问系统,但所有被同一个僵尸网络感染的计算机将从一台控制命令服务器接收到相同的命令。
  • 下载器:下载其他恶意代码的恶意代码。通常在攻击者获得系统的访问时首先进行安装。
  • 间谍软件:从受害计算机上收集信息并发送给攻击者的恶意代码。比如:嗅探器、密码哈希采集器、键盘记录器等。
  • 启动器:启动其他恶意程序的恶意代码。通常采用非传统技术来启动其他恶意程序,以确保其隐蔽性,或者以更高权限访问系统。
  • Rootkit:用来启动其他恶意代码的恶意代码。通常与其他恶意代码(如后门)组成工具套装,来允许为攻击者提供远程访问,或者以更高权限访问系统。
  • 勒索软件:会通知用户系统中存在恶意代码,而除掉它们的唯一办法只有购买他们的“软件”。事实上,他们所卖软件的全部功能只不过将勒索软件进行移除而已。
  • 发送垃圾邮件的恶意代码:这类恶意代码在感染用户计算机后,会使用系统与网络资源来发送大量的垃圾邮件。
  • 蠕虫:可以自我复制和感染其他计算机的恶意代码

同时, 利用一些程序的漏洞和特殊功能(如office的宏), 也可以进行攻击

所以说, 道理我都懂, 但是应该怎么保护我的电脑?

最简单的方式就是

拒绝盗版及来如不明的软件, 只使用来自可信渠道的软件

当然, 这是不现实滴

那么又如何保证下载到的软件是来自我们想要的提供者呢?

让我们打开 IDA Pro 和 <恶意软件分析实战> … 等一下先别打我, 有两种方法, 数字签名和哈希值

简单地说,所谓数字签名就是附加在数据单元上的一些数据,或是对数据单元所作的密码变换。这种数据或变换允许数据单元的接收者用以确认数据单元的来源和数据单元的完整性并保护数据,防止被人进行伪造。而哈希值,是一种从任何一种数据中创建小的数字“指纹”的方法。

通常来说, 在软件的下载界面会提供一串哈希值, 或者提供一个Sig文件, 当软件下载完成之后, 我们需要使用小工具来计算所需要的哈希值, 并且和网页上的值进行对比

通常来说, 在搜索引擎上搜索”操作系统 哈希类型 工具”就会获得很多下载, 如可以直接搜索 “linux sha256 工具”.

关于数字证书, 在Windows的操作系统上对着任意的文件右键, 如果他带有褐发色数字签名, 那么你会在数字签名的标签页下方看到他的状态,点击详细信息,则正常的程序应该显示”此数字签名正常”. 而linux 操作系统则需要下载一些额外的小工具

0x04 别说这么多, 我就是想用!

0x04 - 1 软件更新: 防患于未然之中

更新主要分为两大类, 功能性更新以及安全更新, 功能性更新显而易见是提供了新的功能, 而安全性更新则是提供了一些安全方面的改进

在编写代码的时候, 难免会存在错误, 其中一些可以被利用的错误则变成了漏洞, 这些漏洞可能隐藏的很深(就像永恒之蓝), 而攻击者则可以利用这些漏洞干坏事, 包括但不限于让程序崩溃, 盗取个人信息, 远程控制电脑等

通过软件补丁, 我们可以及时的修复这些已知的漏洞,让攻击者不得不挖掘新的漏洞, 同时可以避免那些只会使用现有工具的恶作剧玩家的攻击

0x04 - 2 权限管理: 凭票出入

权限管理的核心是访问控制, 常见的域账户,UAC,SELinux等等都属于权限管理的范畴, 它的核心思想是

  1. 防止非法的主体访问受保护的资源。
  2. 允许合法用户访问受保护的资源。
  3. 防止合法的用户对受保护的资源进行非授权的访问。

设想一下,如果一个以 root 身份运行的网络服务存在 0day 漏洞,黑客就可以利用这个漏洞,以 root 的身份在服务器上为所欲为了。是不是很可怕?

最小权限原则限制代码运行所需的安全权限,之所以这么做, 有一个非常重要的原因,就是降低你的代码在被恶意用户利用时造成的损失。如果你的代码仅仅使用最小权限来执行,恶意用户就难以使用它造成损失。如果你使用管理员权限来执行代码,那么任何代码中的安全缺陷都会潜在造成更大的损失。

在分配权限的时候,要考虑以下的问题:

  1. 程序需要该权限吗?
    • 如果程序不需要任何特殊权限来运行,它不应该是个特权程序。
  2. 程序需要所有权限吗?
    • 我们只给予程序完成任务所需的最小权限集合。
    • 多数现代 Unix 系统(和 Windows)引入了更多选择。这些系统将 Root 权限划分为多种子权限。使用这种自粒度,我们就可以更好应用最小权限原则
  3. 程序现在需要权限吗?
    • 程序通常偶尔不需要特定权限,它们在这个时候就变得不必要了。我们应该暂时禁用它们来满足最小权限原则。这么做的好处就是,防止程序犯下意外的错误,使之不能对需要禁用权限的事情造成损失。
  4. 程序在未来需要权限吗?
    • 如果权限不再需要了,它就是不必要的,应该永久删除,所以最小权限集合应基于未来的需求来调整。

0x04 - 3 杀毒软件: 系统的监管者

反病毒软件的任务是实时监控和扫描系统。部分反病毒软件通过在系统添加驱动程序的方式,进驻系统,并且随操作系统启动。大部分的杀毒软件还具有防火墙功能。

反病毒软件的实时监控方式因软件而异。

有的反病毒软件,是通过在内存里划分一部分空间,将电脑里流过内存的数据与反病毒软件自身所带的病毒库(包含病毒定义)的特征码相比较,以判断是否为病毒。

另一些反病毒软件则在所划分到的内存空间里面,虚拟执行系统或用户提交的程序,根据其行为或结果作出判断。

而扫描磁盘的方式,则和上面提到的实时监控的第一种工作方式一样,只是在这里,反病毒软件将会将磁盘上所有的文件(或者用户自定义的扫描范围内的文件)做一次检查。

关于杀毒软件大家都很熟悉了, 但是有些时候杀毒软件提示了风险, 我们依然想要执行这些带有风险的程序, 那么怎么办呢?

0x04 - 4 沙盒与容器: 构建安全的环境

想象一下,在一个装满了平整细沙的盒子里,我们可以尽情随意地在上面作画、涂写,无论画的好坏,最后轻轻一抹,沙盒又回到了原来的平整状态。沙盒的魅力就在于他允许你出错,还可以给你改正的机会

沙盒技术提供对资源的严格控制,通过限制对内存、系统文件和设置的访问,允许执行恶意代码而不会影响主机设备。

沙盒可以通过执行潜在恶意代码而发现其活动和意图, 这种针对行为的分析意味着,即使是0day漏洞利用都可以被发现

当然, 它的缺点也显而易见: 它的安全性依赖于操作系统的安全性, 如果操作系统本身不够安全, 那么沙盒的保护就有被破坏的风险

0x04 - 5 虚拟机: 完全隔离的解决方案

虚拟机指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。

理论上, 一个配置得当的虚拟机是非常安全的, 可以用来调试已知具有恶意行为的代码, 当然, 要是这还不能满足安全性要求,那么只能…

0x04 - 6 物理隔离: 终极大杀器

靠软件实现的安全方案总会有不足, 比如Intel的CPU不是才出了漏洞. 所以真正安全的解决方案是将个人电脑与工作电脑分开, 互不干涉

0x05 关注威胁情报

0x05 - 1 为什么会有威胁情报?

如今,新一代的攻击者常常向企业和组织发起针对性的网络攻击。这样的网络威胁,用术语来说就是“高级持续性攻击”(Daly (2009))。这种针对特定企业或行业的攻击,一般经过了精心的策划,攻击方法错综复杂,常导致严重的数据泄露或者破坏。

最近几个备受关注的案例包括:网络犯罪者向零售商、银行和其他组织发起针对性攻击,以获得经济利益;“激进黑客”(hacktivist)和国家背景的黑客攻击媒体、金融组织、政府机构,以实现政治目的。其他的案例包括:私营或国营企业盗取国防企业及制造商的工程和业务流程信息;懂金融的黑客攻击医疗和制药公司,来获取影响股票价格的内部信息。

这些黑客不断改变现有的攻击方式,开发新的方法;单独依赖防火墙、入侵防御系统和反病毒软件,无法阻止这些黑客的攻击。这类攻击无法通过恶意程序签名或者过去的攻击技术报告进行检测。而且,实际上,大多数企业面临的现状是收到的原始威胁数据过多:有太多警报,太多漏洞预警和补丁,太多关于各类恶意软件、钓鱼攻击和DDoS攻击的报告。

急速增长的针对性网络攻击直接催生了威胁情报服务。或者用现在流行的一句话来概括即:攻防不对等——而威胁情报的出现就是为了尽可能消除这种不对等。

0x05 - 2 为什么要关注威胁情报?

我们可以通过安全情报来保证自己的环境中出现薄弱的点的时候提前感知并且修复风险

0x06 APT - 高级持续威胁

高级长期威胁(英语:advanced persistent threat,缩写:APT),又称高级持续性威胁、先进持续性威胁等,是指隐匿而持久的电脑入侵过程,通常由某些人员精心策划,针对特定的目标。其通常是出于商业或政治动机,针对特定组织或国家,并要求在长时间内保持高隐蔽性。高级长期威胁包含三个要素:高级、长期、威胁。高级强调的是使用复杂精密的恶意软件及技术以利用系统中的漏洞。长期暗指某个外部力量会持续监控特定目标,并从其获取数据。威胁则指人为参与策划的攻击。

APT发起方,如政府,通常具备持久而有效地针对特定主体的能力及意图。此术语一般指网络威胁,尤其是指使用众多情报收集技术来获取敏感信息的网络间谍活动,但也适用于传统的间谍活动之类的威胁。其他攻击面包括受感染的媒介、入侵供应链、社会工程学。个人,如个人黑客,通常不被称作APT,因为即使个人有意攻击特定目标,他们也通常不具备高级和长期这两个条件。

APT并无准确定义,但总体可归纳如下:

  • 高级 – 威胁的幕后操纵者对情报收集技术有着全面的掌控能力。其中可包括电脑入侵技术和传统情报收集技术(如电话监听技术、卫星成像技术)。攻击中使用的各个组件本身可能并不能算特别“高级”(例如,利用公开的恶意软件生成工具生成的恶意软件,或是一些容易获得的漏洞利用材料),但是操纵者往往可以按需开发出更高级的工具。他们一般会使用多种针对方式、工具和技术以入侵目标,并保持访问权限。操纵者也可能会特别注意行动中的安全,这一点和“不那么高级”的威胁有所不同。
  • 长期 – 操纵者注重一个特定的任务,而不是盲目搜寻信息。这一区别暗示攻击者受到外部力量指示。为了达到预定目的,攻击者会持续监控目标,并做出反应。这并不表示攻击者会经常发动攻击、频繁更新恶意软件。事实上,“放长线”的方法会更为成功。如果操纵者失去了对目标的访问权,他们一般会重新尝试入侵,也往往会成功。操纵者的目的之一就是对目标保有长期的访问权,而不是一次性的访问权。
  • 威胁 – APT之所以成为威胁,是因为发起方既有此能力,又有此意图。APT攻击是由一群有组织的人发起的。操纵者有特定的目标,且技术精湛、资金雄厚。

0x08 ARK工具简介

ARK是英语Anti Rootkit的缩写,运行这类工具软件时,软件可以通过使用系统最高权限,对系统进行最高级别的设置管理。代表软件为PC Hunter, 它们可以做什么呢?

  • 进程/内存/线程/模块/句柄/窗口管理
  • 内核模块查看
  • 网络连接查看和禁止
  • 查看/恢复SSDT和Shadow SSDT
  • 扫描/恢复RING3和RING0的内联钩子
  • 查看并删除消息钩子
  • 查看/恢复重要驱动程序分发函数
  • 查看/恢复内核对象例程钩子
  • 枚举各种通告和回调
  • 枚举I/O定时器

当然, 这只是一小部分功能, 如果真的想分析病毒木马, 这里推荐一本书, 叫做<恶意软件分析实战>, 这里就不进行额外的介绍了, 如果没有把握,还是不要在电脑上运行这种工具了.

0x09 思考题时间

  1. 为什么前两课的时候需要安装两台虚拟机?如果将所有的工具都直接安装在操作系统上可以么?为什么?
  2. 在第一课布置DVWA的时候我们做了哪些安全措施?分别是提高了安全性或者降低了安全性?
  3. 在DVWA的漏洞环境中, 我们可以通过上面提到的的什么方式来缓解已知的漏洞攻击?为什么选择它而不是别的?
  4. 公司安全条例中的禁止外借域账号与VPN账号是出于什么方面的考量?为什么会配备工作计算机?
  5. 打开未知的office文件使用上面的哪种方式比较好? 一个破解版软件呢? 为什么?