本文已参与「新人创作礼」活动,一起开启掘金创作之路。
Table of Contents
PPT上的内容
操作系统安全基础
保护模式
问题: 16位或32位CPU什么含义
指的是“数据总线”的宽度,即ALU算数逻辑运算单元取数据的能力。那么,自然而然,“地址总线”与“数据总线” 宽度应该是一样的。也就是,到一个地址读取一个数据时,一次性就能读这么多。
问题: 16位寻址有多大地址空间?
216
用 16 位 CPU 寄存器拼接出 20 位地址,再读硬盘数据
从16位内部地址到20位真实地址的转换方法。以下方法与操作系统课程中“段式内存管理”非常类似,但缺少的是地址空间保护机制 。
1. 配置 4 个段寄存器 CS、DS、SS、ES,对应高 16 位
2. 访内指令地址都是 16 位,对应低 16 位
3. 送上地址总线前与某个段寄存器相加,形成真实硬盘地址
问题: 段式管理的方式是什么?
段式管理(segmentation),是指把一个程序分成若干个段(segment)进行存储,每个段都是一个逻辑实体(logicalentity),程序员需要知道并使用它。它的产生是与程序的模块化直接有关的。段式管理是通过段表进行的,它包括段号或段名、段起点、装入位、段的长度等。此外还需要主存占用区域表、主存可用区域表。
WinDbg相关知识
CR3
CR3 存储 PDT 的基地址,也称为 PDTB。CR3 存储的是第一个 PDT 的基地址。
一些基础命令
| 命令 | 解释 |
| $scopeip | 当前本地上下文(也称为范围)的指令指针。 |
| $ententry | 当前进程的第一个可执行文件的入口点的地址。 |
| $proc | 当前进程的地址(即EPROCESS块的地址)。 |
| 命令 | 解释 | 示例 |
|---|---|---|
| bp | 下断点 | bp @变量 |
bp Address |
||
bp MyApp!Func |
||
| g | 继续执行 | |
| bu | 针对某个符号下断点 | 模块加载前下断点 |
| bm | 支持正则表达式断点 | bm *!draw* |
| bl | 列出断点列表 | |
| bc | 清除断点 | |
| ba | 指定内存被访问触发断点 | ba Access Size Address |
ba w4 0x222 |
||
| !address | 目标进程内存使用 | !address Address |
| 将堆栈地址分开 | !address -summary |
|
| !dh | 扩展指定映像的头部 | !dh -h |
!dh -f notepad |
||
!dh ntdll |
||
| !lmi | 某个模块的详细信息 | !lmi ntdll |
| lm | 模块及模块的符号加载 | lm |
lm vm test.dll |
||
| x | 检查符号 | x kernel32!Virtual* |
| k | 查看线程调用栈 | k |
| 显示每个函数的前三个参数 | kb |
|
| db | 单字节显示某地址的数据 | db notepad |
| dd | 同上 双字节显示 | |
| dt | 显示结构信息 | dt _PEB |
| 显示PE的结构 | dt -r ntdll!_IMAGE_NT_HEADERS 00fd00fd |
|
| dx | C++指针计算 | dx -r1 (*((ntdll!_IMAGE_OPTIONAL_HEADER *) 0xfd0110)) |
dx -r2 (*((ntdll!_IMAGE_DATA_DIRECTORY (*)[16]) 0xfd0170)) |
symchk
# 运行下面命令下载 windows 所有的符号文件
"C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\symchk.exe" /r c:\windows /s SRV*c:\symbols\*http://msdl.microsoft.com/download/symbols
# 查找指定dll的符号文件
"C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\symchk.exe" "c:\windows\system32\kernel32.dll" /s SRV*c:\symbols\*http://msdl.microsoft.com/download/symbols
.sympath 是添加符号路径,然后再.reload一下
双机调试设置
虚拟机添加串行端口
\\.\pipe\com_1
WinDbg启动属性添加参数
-b -k com:\\.pipe\com_1,baud=115200,reconnect -y
符号文件
符号文件(Symbol Files)是一个数据信息文件,它包含了应用程序二进制文件(比如:EXE、DLL等)调试信息,专门用来作调试之用,最终生成的可执行文件在运行时并不需要这个符号文件,但你的程序中所有的变量信息都记录在这个文件中。所以调试应用程序时,这个文件是非常重要的。用 Visual C++ 和 WinDbg 调试程序时都要用到这个文件。
用户模式和内核模式
运行 Windows 的计算机中的处理器有两个不同模式:用户模式 和内核模式 。 根据处理器上运行的代码的类型,处理器在两个模式之间切换。 应用程序在用户模式下运行,核心操作系统组件在内核模式下运行。 虽然许多驱动程序以内核模式运行,但某些驱动程序可能以用户模式运行。
启动用户模式应用程序时,Windows 会为该应用程序创建进程 。 进程为应用程序提供专用的“虚拟地址空间” 和专用的“句柄表” 。 由于应用程序的虚拟地址空间为专用空间,因此一个应用程序无法更改属于其他应用程序的数据。 每个应用程序都隔离运行,如果一个应用程序发生故障,则故障仅局限于该应用程序。 其他应用程序和操作系统不会受该故障的影响。
除了专用之外,用户模式应用程序的虚拟地址空间也受到限制。 在用户模式下运行的处理器无法访问为操作系统保留的虚拟地址。 限制用户模式应用程序的虚拟地址空间可防止应用程序更改以及可能损坏关键的操作系统数据。
在内核模式下运行的所有代码都共享单个虚拟地址空间。 这意味着内核模式驱动程序不会与其他驱动程序和操作系统本身隔离。 如果内核模式驱动程序意外写入错误的虚拟地址,则属于操作系统或其他驱动程序的数据可能会受到安全威胁。 如果内核模式驱动程序发生故障,整个操作系统就会发生故障。
Kernel Mode
在内核模式下,代码具有对硬件的所有控制权限。可以执行所有CPU指令,可以访问任意地址的内存。内核模式是为操作系统最底层,最可信的函数服务的。在内核模式下的任何异常都是灾难性的,将会导致整台机器停机
User Mode
在用户模式下,代码没有对硬件的直接控制权限,也不能直接访问地址的内存。程序是通过调用系统接口(System APIs)来达到访问硬件和内存。在这种保护模式下,即时程序发生崩溃也是可以恢复的。在你的电脑上大部分程序都是在用户模式下运行的。
函数堆栈
push -> esp –
内存保留和内存提交的概念:?
简答题:画图,EIP、ESP、EBP
PE
安全中最常用的PE后缀
dll
HOOK
整体思路:首先再一个程序中,设定两个函数,hook还有hello函数,程序正常运行,然后我们通过修改hello函数的返回地址,来执行hook函数,执行完后,正常返回地址,这样就可以起到hook的作用;
-
编写源码
#include <stdio.h> void hook() { printf("hack by jovy-rtt!\n"); } void hello() { printf("Hello World!\n"); } int main() { hello(); return 0; } -
编译配置
-
WinDbg断点设置,运行
-
按照思路修改运行
计算机病毒与恶意代码
第一章
恶意代码的定义 P2
在未被授权的情况下,以破坏软硬件设备、窃取用户信息、扰乱用户心理、干扰用户正常使用为目的而编制的软件或代码片段。这个定义涵盖的范围非常广泛,它包含了所有敌意、插入、干扰、讨厌的程序和源代码。一个软件被看作是恶意代码主要是依据创作者的意图,而不是恶意代码本身的特征。
恶意代码的共同特征 P3
目的性:
目的性是恶意代码的基本特征,是判别一个程序或代码片段是否为恶意代码的最重要的特征,也是法律上判断恶意代码的标准。
传播性:
传播性是恶意代码体现其生命力的重要手段。
破坏性:
破坏性是恶意代码的表现手段。
恶意代码种类 P9
普通计算机病毒 蠕虫 特洛伊木马 RootKit工具 流氓软件 间谍软件 恶意广告 逻辑炸弹 僵尸网络 网络钓鱼 恶意脚本 垃圾短信 勒索软件 移动终端恶意代码
恶意代码的传播途径 P13
软盘、光盘、硬盘、Internet、无线通信系统
恶意代码发作后的现象 P18
无法启动系统;
系统文件丢失或被破坏;
部分BIOS程序混乱;
部分文档丢失或被破坏;
部分文档自动加密;
目录结构发生混乱;
网络无法提供正常的服务;
浏览器自动访问非法网站。
与恶意代码现象类似的故障 P19
- 硬件故障
系统的硬件配置;
电源电压不稳定;
接触不良;
驱动器故障;
CMOS的问题。
- 软件故障
软件程序已被破坏;
软件与操作系统不兼容 ;
引导过程故障 ;
使用不同的编辑软件导致错误。
第二章
计算机病毒的组成 P47
从制作结构上分析,传统计算机病毒一般包括引导模块、感染模块、破坏模块、触发模块四大功能模型。
引导模块 P48
计算机病毒的引导过程:
驻留在内存中; 窃取系统控制权; 恢复系统功能。
触发模块 P50
-
触发条件:
-
计算机病毒在传染和发作之前,往往要判断某些特定条件是否满足,满足则传染或发作,否则不传染或不发作或只传染不发作,这个条件就是计算机病毒的触发条件。
-
病毒常用的触发条件:日期触发、时间触发、键盘触发、感染触发、启动触发、访问磁盘次数触发、CPU型号/主板型号触发
-
触发模块的目的是调节病毒的攻击性和潜伏性之间的平衡:
-
大范围的感染行为、频繁的破坏行为可能给用户以重创,但是,它们总是使系统或多或少地出现异常,容易使病毒暴露。
-
而不破坏、不感染又会使病毒失去其特性。
-
可触发性是病毒的攻击性和潜伏性之间的调整杠杆,可以控制病毒感染和破坏的频度,兼顾杀伤力和潜伏性。
世界上第一台计算机ENIAC是RAM模型。 P27
第三章
病毒感染其他文件的步骤 P71
(1)判断目标文件开始的两个字节是否为MZ。 (2)判断PE文件标记“PE”。 (3)判断感染标记,如果已被感染过则跳出继续执行宿主程序,否则继续。 (4)获得Data Directory(数据目录)的个数,(每个数据目录信息占8个字节)。 (5)得到节表起始位置。(数据目录的偏移地址+数据目录占用的字节数=节表起始位置) (6)得到节表的末尾偏移(紧接其后用于写入一个新的病毒节信息,节表起始位置+节的个数*每个节表占用的字节数28H=节表的末尾偏移)。 (7)开始写入节表。 (8)在新添加的节中写入病毒代码。 (9)将当前文件位置设为文件末尾。
从R3到R0的简述 p72
Windows操作系统运行在保护模式,保护模式将指令执行分为4个特权级:Ring0,Ring1,Ring2,Ring3。Ring0级别最高,可以执行特权指令;Ring3级别最低,通常应用程序运行于Ring3。
宏病毒 P73
宏病毒是利用系统的开放性专门制作的一个或多个具有病毒特点的宏的集合,这种病毒宏的集合影响到计算机的使用,并能通过文档及模板进行自我复制及传播。 经典宏病毒:美丽莎(Melissa)、台湾NO.1B、O97M.Tristate.C病毒
第五章
特洛伊木马 P122
一种与远程计算机之间建立起连接,使远程计算机能够通过网络控制用户计算机系统并且可能造成用户的信息损失、系统损坏甚至瘫痪的程序。
木马的组成 P122
(1)硬件部分:控制端、服务端、Internet (2)软件部分:控制端程序、木马程序、木马配置程序 (3)具体连接部分:控制端IP和服务端IP、控制端端口和服务端端口
木马程序的基础特征 p123
欺骗性、隐蔽性(首要特征)、自动运行性、自动恢复性、功能的特殊性
网站挂马技术 P139
攻击者通过在正常的页面中(通常是网站的主页)插入一段代码。浏览者在打开该页面的时候,这段代码被执行,然后下载并运行某木马的服务器端程序,进而控制浏览者的主机.
隐藏技术 P143
木马为了生存,使用许多技术隐藏自己的行为(进程、连接和端口); 主要隐藏技术有:反弹式木马技术、用ICMP方法隐藏连接、隐藏端口
第七章
蠕虫 P187
蠕虫(Worm)是恶意代码的一种,它的传播通常不需要所谓的激活。它通过分布式媒介进行图传播.
蠕虫的分类 P187
一种是面向企业用户和局域网而言,这种病毒利用系统漏洞,主动进行攻击,可以对整个互联网可造成瘫痪性的后果。以“红色代码”、“尼姆达”以及最新的“SQL蠕虫王”为代表;
另外一种是针对个人用户的,通过网络(主要是电子邮件、恶意网页形式)迅速传播的蠕虫病毒,以爱虫病毒、求职信病毒为代表。
RPC漏洞 P192
远程过程调用 (RemoteProcedureCall)是 Windows 操作系统使用的一个协议,提供了一种进程间通信机制,通过这一机制,在一台计算机上运行的程序可以顺畅地执行某个远程系统上的代码。
RPC 中处理通过 TCP/IP 的消息交换的部分存在一个漏洞。此问题是由错误地处理格式不正确的消息造成的。
RPC漏洞影响分布式组件对象模型 (DCOM) 与 RPC 间的一个接口,此接口侦听 TCP/IP 端口 135。
Samba等程序存在此类漏洞
第八章
勒索型恶意代码加密算法 P212
自定义加密算法、对称加密算法(AES)、对称-非对称加密算法(RSA-AES)、非对称加密算法(RSA)
第九章
流氓软件 P227
第一个定义:流氓软件是指具有一定的实用价值但具备电脑病毒和黑客的部分行为特征的软件。它处在合法软件和电脑病毒之间的灰色地带,使用户无法卸载、并强行弹出广告和窃取用户的私人信息。
第二个定义:流氓软件是介于病毒和正规软件之间的软件,同时具备正常功能(下载、媒体播放等)和恶意行为(弹广告、开后门),给用户带来实质危害
Rootkit P243
Rootkit是一种特殊的恶意软件,它的功能是在安装目标上隐藏自身及指定的文件、进程和网络链接等信息,比较多见到的是Rootkit一般都和木马、后门等其他恶意程序结合使用。Rootkit是攻击者用来隐藏自己的踪迹和保留root访问权限的工具。
网络嗅探程序;
特洛伊木马程序 ;
隐藏攻击者的目录和进程的程序;
日志清理工具;
FIX程序 ;
其他工具,例如telnet、shell和finger等服务。
APT的攻击过程 P246
第一阶段:定向信息收集;
第二阶段:单点攻击突破;
第三阶段:构建通道;
第四阶段:横向渗透;
第五阶段:目标行动。
APT的特征 P248
- 高级性:
高级的收集手段;
威胁高级的数据;
高级的攻击手法。
- 持续性:
持续潜伏;
持续攻击;
持续欺骗;
持续控制。
第十章
恶意代码防范思路 P256
(1) 检测:利用静态检测、动态检测技术,通过手工检测或自动检测方法来识别恶意代码;
(2)清除:根据恶意代码的类型,选择不同的方法来清除恶意代码;
(3)预防:通过安装防火墙等软件来阻止恶意代码进入系统(被动);
(4)免疫:同防范类似,不过是主动的。
(5)数据备份及恢复:及时对数据进行备份、遇到故障时保证数据可恢复;
(6)防范策略
第十一章
恶意代码防范策略的基本准则 P302
拒绝访问能力;
病毒检测能力;
控制病毒传播的能力;
清除能力;
恢复能力;
替代操作
防治策略 P303
(1)国家层面:
完善相关法律法规及其贯彻落实工作;
在各主干网络建立预警系统;
建立多层次恶意代码应急体系;
建立动态的系统风险评估措施;
建立恶意代码事故分析制度;
制定完备的备份和恢复计划;
提高国内运营商自身的安全性;
加强信息安全培训;
加强技术防范措施。
(2)单机用户:
一般措施:
1)经常从软件供应商那边下载、安装安全补丁程序和升级杀毒软件。
2)新购置的计算机和新安装的系统,一定要进行系统升级,保证修补所有已知的安全漏洞。
3)使用高强度的口令。
4)经常备份重要数据。特别是要做到经常性地对不易复得数据(个人文档、程序源代码等等)完全备份。
5)选择并安装经过公安部认证的防病毒软件,定期对整个硬盘进行病毒检测、清除工作。
6)安装防火墙(软件防火墙),提高系统的安全性。
7)当计算机不使用时,不要接入互联网,一定要断掉连接。‘8)不要打开陌生人发来的电子邮件,无论它们有多么诱人的标题或者附件。同时也要小心处理来自于熟人的邮件附件。
9)正确配置、使用病毒防治产品。
10)正确配置计算机系统,减少病毒侵害事件。充分利用系统提供的安全机制,提高系统防范病毒的能力。
11)定期检查敏感文件。对系统的一些敏感文件定期进行检查,保证及时发现已感染的病毒和黑客程序。
上网基本策略:
1)采用匿名方式浏览。
2)在进行任何的交易或发送信息之前阅读网站的隐私保护政策。
3)安装个人防火墙,保护隐私信息。
4)使用个人防火墙防病毒程序以防黑客攻击和检查黑客程序(一个连接外部服务器并将你的信息传递出去的软件)。
5)网上购物时,确定你采用的是安全的连接方式。
6)在线时不要向任何人透露个人信息和密码。
7)经常更改你的密码。
8)在不需要文件和打印共享时,关闭这些功能。
9)扫描计算机并查找安全漏洞,提高计算机防护蠕虫病毒和恶意代码的能力。
10)不厌其烦地安装补丁程序。
11)尽量关闭不需要的组件和服务程序。
12)尽量使用代理服务器。