zoukankan      html  css  js  c++  java
  • 快速自检电脑是否被黑客入侵过(Linux版)

    前言

    严谨地说, Linux只是一个内核, `GNU Linux`才算完整的操作系统, 但在本文里还是用通俗的叫法,

    把`Ubuntu`,`Debian`,`RedHat`,`CentOS`,`ArchLinux`等发行版都统称为`Linux`.

    本文里所说的方法不仅对Linux的发行版适用, 部分方法对`Mac OSX`操作系统也是适用的.

    异常的帐号和权限

    如果黑客曾经获得过命令运行的机会, 对方往往会想要将这个机会持续下去, 业内称之为`持久化(persistence)`.

    而创建后门帐号, 往往是一个持久化的途径.

    检查异常帐号

    搜寻用户

    `cat /etc/passwd`可以看到当前系统中的所有用户和对应的组信息, 如果帐号太多一眼看不过来,

    我通常会用下述方法筛选:

    ```sh

    cat /etc/passwd | awk -F: '{print $7}' | sort | uniq -c

    ```

    改命令的作用是打印所有类型的shell和对应的数量, 对于有shell的用户, 要仔细检查.

     检查用户

    如果上一步获得了某个异常的用户名(假设为`hacker`), 可以用以下方法详细检查该用户:

    - 查看用户id和组信息: id hacker

    - 查看用户最近登录信息: lastlog -u hacker

    - 查看用户历史登录信息: last hacker

    - 查看用户登录失败信息: lastb hacker

    - 查看综合信息: finger hacker

    注: `finger`命令在某些操作系统里不是内置的, 可以自行用包管理工具安装, 如:

    > Ubuntu/Debian: apt-get install finger

    > CentOS/RedHat: yum install finger

    > ArchLinux: pacman -S finger

    下面提到的其他非内置命令类似

    检查异常权限

    一般的Linux用户都会用`sudo`来让普通用户可以执行root操作, 因此对于已经存在的普通用户,

    也不可掉以轻心. `sudo`所管理的权限, 在`/etc/sudoers`以及`/etc/sudoers.d`中可以查看,

    最好经常检查改文件以确保没有普通用户获得了意外的权限. 对于每个普通用户,

    可以用命令`groups username`来查询其所属的组, 如果是root或者sudo组,

    或者该组在`/etc/sudoers`文件中, 那就要格外警觉了.

    异常的自启动项

    Linux下的自启动流程根据其服务管理器的不同而不同, 常用的有以下三种:

    Upstart

    [Upstart][upstart]是基于事件的,用来取代古老的/sbin/init进程来处理任务和服务自启动的方法.

    查看该类型的自启动文件可以用以下命令:

    - 查看所有自启动项目: `initctl list`

    - 查看某个自启动项目: `initctl show-config evil`

    SystemV

    [SystemV][systemv]就是常用的`service start/stop/status xxx.service`命令背后的服务管理系统.

    查看该类型的自启动文件可以用以下命令:

    - 查看自启动脚本: `ls /etc/init.d/`

    - 查看运行级别的符号链接: `ls /etc/rc*.d/`

    SystemD

    [SystemD][systemd]是现代的服务管理系统, 比较新的Linux版都已经迁移为SystemD了.

    有两种方式查看所有自启动的服务:

    - `systemctl list-unit-files –type=service`

    - `ls /lib/systemd/system/*.service /etc/systemd/system/*.service`

    旧版本的Linux一般是Upstart和SystemV混用, 新版本都大多迁移到SystemD了.

    其他

    异常的计划任务

    除了上述的自启动服务, Linux下还可以通过计划任务来进行持久化运行, 检查异常的计划任务相对简单,

    只需要查看`/etc/crontab`以及子目录下`/etc/cron.*`的计划任务文件即可.

    bash初始化

    用过Linux的都知道, 在`$HOME/.bashrc`文件里可以进行初始化配置并应用于每个shell,

    也就是说里面的脚本在每次新开一个terminal的时候都是有可能被运行的.

    这类配置文件包括`.bashrc`, `.bash_profile`, `.bash_login`, `.profile`等等.

    其是否运行以及运行的顺序由shell被调用时是否登录, 以及是否交互运行来决定,

    对于bash来说, 执行流程如下表:

      脚本名称        |交互登录|交互非登录|脚本(即非交互)

    ------------------|--------|----------|--------------

    `/etc/profile    `|   A    |          |               

    `/etc/bash.bashrc`|        |    A     |               

    `~/.bashrc       `|        |    B     |               

    `~/.bash_profile `|   B1   |          |               

    `~/.bash_login   `|   B2   |          |               

    `~/.profile      `|   B3   |          |               

    `$BASHENV        `|        |          |      A        

    `                `|        |          |               

    `~/.bash_logout  `|   C    |          |           

    其中执行顺序为`A->B->C`, B[123]表示只有当第一个脚本存在时候才会执行. 用流程图表示如下:

    ![启动顺序](http://www.solipsys.co.uk/images/BashStartupFiles1.png)

    关于登录/非登录shell以及交互/非交互shell的内容可以参考网上的其他介绍, 这里就不展开了.

    只要知道自己的shell初始化所执行的文件顺序, 并检查这些文件看是否有可疑命令, 从而才能发现异常信息.

     应用级别的自启动

    要找到所有可疑的自启动项是困难的, 有经验攻击者可以修改现有的自启动脚本, 额外拉起命令,

    从而减少被发现的风险. 一些Linux桌面版本也会负责运行类似的自启动命令, 比如我最爱的xfce,

    在`Settings -> Session Starup -> Application Autostart`就可以添加自启动的应用.

    异常的记录

    异常的命令历史记录

    一般而言, 黑客获取shell之后会在上面执行某些命令, 我们可以通过`history`命令来查看曾经运行过的命令.

    或者直接查看`~/.bash_history`文件. 聪明的黑客干完坏事也许会清理痕迹, 但如果发现history被恶意清除,

    或者被异常篡改, 那也足以给我们警示的信号了.

    异常的日志记录

    日志, 尤其是系统日志, 是我们绝佳的帮手, 下面一些命令可以用来读取日志文件并输出相关信息:

    - 查看每个用户最近的登录时间和ip: `lastlog`

    - 查看每个用户的登录记录: `last`

    - 查看每个用户的登录尝试(包括失败的)记录: `lastb`

    - 查看当前登录的用户,ip以及正在执行的命令: `w`

    当然, 有心的攻击者也会在这些命令中隐藏自己的痕迹, 比如使用小工具[hidemyass][hidemyass].

    系统日志一般都由rsyslogd进程产生, 配置在`/etc/rsyslog.conf`文件以及`/etc/rsyslog.d/`目录下,

    一些常见的日志和介绍如下:

    - /var/log/messages: 一般的系统日志

    - /var/log/kern.log: 系统内核日志

    - /var/log/boot.log: 系统启动日志

    - /var/log/auth.log: 登录相关的日志, 比如ssh/sudo成功失败的日志都在这里

    - /var/log/secure: 同上

    - /var/log/cron.d: cron计划任务的执行日志

    通过检查上述日志, 往往可以发现一些意想不到的痕迹(如果有的话).

    # 犯罪现场

    虽然说自检主要是从犯罪痕迹中找到线索和指示, 但有时候攻击者留下的恶意软件还是会正在运行中的,

    这时, 从犯罪现场来搜寻蛛丝马迹也是一个不错的主意.

    ## 异常的进程

    查找异常进程, 可以用`top`命令查看正在运行的程序所占用的资源, 或者用`ps -ef`列出当前系统所用的进程.

    如果发现自己不认识的进程, 可以用以下命令进行详细的检查:

    - 查看该进程启动的完整命令行: `ps eho command -p $PID`

    - 查看该进程启动时候所在的目录: `readlink /proc/$PID/cwd`

    - 查看该进程启动时的完整环境变量: `strings -f /proc/$PID/environ | cut -f2 -d ‘ ‘`

    - 列出该进程所打开的所有文件: `lsof -p $PID`

    - 列出该进程所打开的网络连接: `netstat -pan | grep $PID`

    当然, 如果攻击者用某种手段隐藏了进程, 也还是会留下一些线索, 比如可疑的LKM模块, 这里就不深入了.

    #异常的网络流量

    如果某个恶意进程正在活动, 很可能此时正在与外界网络有交流, 这就需要通过抓包工具来进行分析了.

    对于Linux桌面用户, wireshark是个绝佳选择, 而对于服务端, tcpdump是个好工具, 对其掌握也是很必要的.

    以wireshark为例, 打开抓包几分钟左右, 通过内置的过滤规则, 加上上面分析到的应用所打开的网络连接,

    就可以看到这个恶意应用到底在和外界做些什么邪恶的交流, 从而及时评估损失和保护数据.

    除了恶意软件发起的网络浏览, 还有一些是通过自身发起的. 比如攻击者修改了iptables,DNS,http代理,

    或者`/etc/hosts`, 都可能会导致我们正常的网络请求被攻击者监听并篡改. 这些小小的修改也许不是很明显,

    可一旦发现自身网络环境’不太对劲’, 就要提高警惕, 仔细排查了.

    # 后记

    使用Linux作为日常桌面操作系统的人, 一般都是有一定的技术水平, 但道高一尺, 魔高一丈,

    攻击Linux的人对应地技术水平也会高些, 所以本文相对于[Windows版的自检][windows]略为详细.

    正所谓’未知攻,焉知防’, 本文很多自检方法也是根据笔者日常的红队经验得到的,

    希望能对提高小伙伴们的安全意识和防护能力有所帮助吧.

    [windows]:https://www.pppan.net/blog/detail/2017-11-08-windows-self-check

    [upstart]:http://upstart.ubuntu.com/cookbook/

    [systemv]:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/s1-boot-init-shutdown-sysv.html

    [systemd]:https://fedoraproject.org/wiki/Systemd#systemd_documentation

    [bashinit]:https://shreevatsa.wordpress.com/2008/03/30/zshbash-startup-files-loading-order-bashrc-zshrc-etc/

    [hidemyass]:https://github.com/pannzh/hidemyass

  • 相关阅读:
    关于ios6.0和5.0的横竖屏支持方法
    windows环境下搭建vue+webpack的开发环境
    诗歌类网址
    【第1阶段—GIS网址清单】其它杂项
    android内存指标
    Rownum与Order by
    使用反射复制一个JavaBean的对象
    catalog
    oralce中rownum理解
    BlockingQueue
  • 原文地址:https://www.cnblogs.com/Fluorescence-tjy/p/8108907.html
Copyright © 2011-2022 走看看