实验室服务器被黑记(下)

  本来这篇文章写的差不多了,后来一直忙,存成草稿没有发,直到最近才想起这回事来。简单分析了一下被植入的脚本,才学疏浅,有误的地方请同学们多指教。

  让我们先来看一下植入脚本的文件结构

root@delleon:~/tmp# find . -printf '%y %p\n'
d .
d ./conect1
f ./conect1/autorun
f ./conect1/run
f ./conect1/bash
f ./conect1/LinkEvents
f ./conect1/start
f ./conect1/inst
d ./conect1/r
f ./conect1/r/raway.e
f ./conect1/r/rnicks.e
f ./conect1/r/rversions.e
f ./conect1/r/rkicks.e
f ./conect1/r/rsignoff.e
f ./conect1/r/rtsay.e
f ./conect1/r/rpickup.e
f ./conect1/r/rsay.e
f ./conect1/r/rinsult.e
d ./conect2
f ./conect2/m.pid
f ./conect2/autorun
f ./conect2/m.lev
f ./conect2/run
f ./conect2/alongi.seen
f ./conect2/.192.168.1.98.user.swp
f ./conect2/vhosts
f ./conect2/bash
f ./conect2/m.set
f ./conect2/LinkEvents
f ./conect2/xey.seen
f ./conect2/cron.d
f ./conect2/start
f ./conect2/m.ses
f ./conect2/inst
f ./conect2/update
f ./conect2/192.168.1.98.user
f ./conect2/192.168.1.98.user2
f ./conect2/mech.dir
d ./conect2/r
f ./conect2/r/raway.e
f ./conect2/r/rnicks.e
f ./conect2/r/rversions.e
f ./conect2/r/rkicks.e
f ./conect2/r/rsignoff.e
f ./conect2/r/rtsay.e
f ./conect2/r/rpickup.e
f ./conect2/r/rsay.e
f ./conect2/r/rinsult.e
d ./conect3
f ./conect3/autorun
f ./conect3/run
f ./conect3/bash
f ./conect3/LinkEvents
f ./conect3/start
f ./conect3/inst
d ./conect3/r
f ./conect3/r/raway.e
f ./conect3/r/rnicks.e
f ./conect3/r/rversions.e
f ./conect3/r/rkicks.e
f ./conect3/r/rsignoff.e
f ./conect3/r/rtsay.e
f ./conect3/r/rpickup.e
f ./conect3/r/rsay.e
f ./conect3/r/rinsult.e

利用53端口的OpenVPN蹭网

      验证53端口是否开放有个最简单的办法,直接nslookup几个域名,看返回结果。如果能正确返回的话则说明53端口是开放的。

      只要主机/VPS支持,搭建OpenVPN的过程其实非常简单,Linode的这篇搭建OpenVPN的知识库教程写的太好了,不差于网上许多牛人的Blog,更别说那些转发来转发去不标注出处的抄袭了。

  1. 安装OpenVPN
  2. 生成各种密钥
  3. 配置服务器和客户端的configure文件
  4. 修改IPv4流的转发和配置iptables
  5. 建立连接,查log监控

      感谢中国移动、中国联通、中国电信,感谢那些提供通过Web验证来计费上网的宿舍。ISP们,乃们颤抖了吧。

如何监听飞信消息并转发为邮件

  本文适用于满足以下条件的读者:日常使用的是电信或者联通的手机,没有移动手机号,并且重度依赖邮件,或者手机终端支持email/push的同学(android和iphone最给力了)。

  众所周知,飞信是中国移动旗下一款超级得力的产品,平时有个班长通知什么的,很多都是使用飞信来通知的,方便、及时,而且对方不在线的话可以直接发送到移动手机上,甚至阿土伯说现在小学生的老师发个作业要求什么的都用飞信发给家长。这一点曾经让我等电信/联通用户困扰不已,现在好了,levin同学写了一个开源的基于GTK+2.0的ofetion,我使用他的fetion库写了一个命令行下的监听飞信消息并且转发邮件的小工具。

 ...... 

实验室服务器被黑记(上)

  早晨上班一到实验室,weekface告诉我说实验室的那台服务器貌似出问题了。他之前写过一个crontab脚本来每天执行一次备份任务,结果今天上去一查,已经不执行好久了,然后查crontab -l,他的那句任务竟然消失不见了,取而代之的指向了一个莫名其妙的脚本。

  我立刻上去看,因为从没遇到这种情况,首先想到的会不会是实验室有同学上来动过,于是问了一下,房间里知道root密码的一共就四个同学,依次询问都说没有动。一边问着,一边看那个脚本的内容,立刻懵了,里面是一些很难阅读的shell命令,这才意识到不妙,出事了。然后查当前在线用户,结果who命令竟然返回的是空!接着last,我靠last也被替换了。赶紧去拔了网线,已经很明显了,我们服务器被黑了。

  接下来一步一步去查找蛛丝马迹。who、last命令已经直接被替换了,root用户的.bash_history已经被我们这几天的新操作给覆盖掉,/var/log/secure也被清空,很干净嘛。然后看crontab修改记录,时间是Jun ...... 

如何建立android的C/C++交叉编译环境

  Android的底层是纯粹的linux内核,可以简单的理解为上面跑了个Dalvik Java虚拟机而已。因此,构建android上C/C++的交叉编译环境也就成为了一个很大的需求。特别是对于已经取得root权限的机器,如果能直接运行按需编译的二进制文件,那么将可以做很多有意义和有趣的事情。

  很不幸,Google没有直接给出如何建立这个交叉编译环境,但是我们可以借助Google提供的强大的NDK (Native Development Tools)来达到这一目的。NDK的本来目标是编译得到.so动态链接库文件,然后通过JNI提供给上层的Java调用,从而实现C/C++程序的简易迁移。而编译.so和编译成二进制可执行文件的过程是完全一样的,这就给了我们可以发挥的空间。

  有两种方式获取交叉编译所需的工具链:git下prebuilt这个project或者直接去下载NDK,我这里arm-eabi的版本是最新的4.4.0。

git clone git://android.git.kernel.org/platform/prebuilt.git

  然后创建一个helloworld.c文件。

//// root@delleon:~/android/myapp# cat helloworld.c
#include  
int main() { 
  printf("HelloWorld!n"); 
  return 0; 
} 

  接下来创建Makefile文件。注意修改其中的NDK_DIR和SDKTOOL为自己的目录,修改APP为自己的待编译程序主文件名。另外注意自己的arm-eabi的版本,若有变化则也需要修改。

#### root@delleon:~/android/myapp# cat Makefile 
APP=helloworld

NDK_DIR := ~/android/android-ndk-r4
NDK_HOST := linux-x86
SDKTOOL := ~/android/android-sdk-linux_86/tools

TOOLCHAIN_PREFIX := $(NDK_DIR)/build/prebuilt/$(NDK_HOST)/arm-eabi-4.4.0/bin/arm-eabi-
CC := $(TOOLCHAIN_PREFIX)gcc
CPP := $(TOOLCHAIN_PREFIX)g++
LD := $(CC)

COMMON_FLAGS := -mandroid -ffunction-sections -fdata-sections -Os -g 
	--sysroot=$(NDK_DIR)/build/platforms/android-5/arch-arm 
	-fPIC 
	-fvisibility=hidden 
	-D__NEW__

CFLAGS := $(COMMON_FLAGS)
 
CFLAGS += -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -DANDROID -DSK_RELEASE -DNDEBUG

CFLAGS += -UDEBUG -march=armv5te -mtune=xscale -msoft-float -mthumb-interwork -fpic -ffunction-sections -funwind-tables -fstack-protector
 ...... 

Linode 360 VPS BenchMark

  昨天帮实验室买了个Linode 360的VPS,梦寐以求哇,迫不及待的去折腾。选在了加州的fremont机房,北京网通的ping值大概在210ms左右,很极品的速度了,ssh上去交互只有一点点地小卡。装的CentOS 5.5,然后配了几个shell账号,通过he.net提供的tunnel broker增加了IPv6的支持,最后装了个启用passenger-ruby模块支持的nginx。明天继续折腾。

  下班前顺便跑了一下Unix Bench 5.1.2,硬件配置上是一颗Intel Xeon L5520 2.27GHz四核的CPU, 8M Cache, Xen虚拟化,360M RAM,16GB Hard Drive。结果如下。

========================================================================
   BYTE UNIX Benchmarks (Version 5.1.2)

   System: li165-73: GNU/Linux
   OS: GNU/Linux -- 2.6.32.12-linode25 -- #1 SMP Wed Apr 28 19:25:11 UTC 2010
   Machine: i686 (i386)
   Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
   CPU 0: Intel(R) Xeon(R) CPU L5520 @ 2.27GHz (4533.5 bogomips)
          Hyper-Threading, MMX, Physical Address Ext
   CPU 1: Intel(R) Xeon(R) CPU L5520 @ 2.27GHz (4533.5 bogomips)
          Hyper-Threading, MMX, Physical Address Ext
   CPU 2: Intel(R) Xeon(R) CPU L5520 @ 2.27GHz (4533.5 bogomips)
          Hyper-Threading, MMX, Physical Address Ext
   CPU 3: Intel(R) Xeon(R) CPU L5520 @ 2.27GHz (4533.5 bogomips)
          Hyper-Threading, MMX, Physical Address Ext
   18:35:04 up 1 day,  2:19,  1 user,  load average: 0.00, 0.00, 0.00; runlevel 3

------------------------------------------------------------------------
Benchmark Run: 二  6月 08 2010 18:35:04 -
 ...... 

Sprint HTC Hero 2.1 Release成功提权到root

  从Sprint 5月19号发布官方2.1升级,到今天获取root,一共用了整整半个月的时间,期间我和其他朋友尝试过各种方法来试图获取都失败,怪不得Sprint发布2.1时老是跳票,其实绝大多数时间都是去给kernel打补丁去了。期间跟regaw讨论过好几次,都进展不佳,要找kernel版本为2.6.29的提权漏洞并且最好是5月份以后泄露的,这真是一件困难的事情。

  Regaw最后使用的办法是通过修改matt写的一个EVO 4G提权漏洞进而使帮助CDMA Hero也获取了提权。感谢大家的努力!

 ...... 

GTK 2.18.3与Linphone 3.2.1编译记录

  实验室有一个SIP相关的项目,客户端选用linphone。因为涉及到音频视频还有图形界面,所以依赖的包很杂,特别是GTK的编译安装。

1.环境:Fedora 7,内核版本2.6.21

2.需要编译的linphone版本3.2.1

3.GTK 2.18.3与Linphone 3.2.1的依赖关系如下:

linphone3.2.1依赖

linphone3.2.1依赖