前言

严谨地说, 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

快速自检电脑是否被黑客入侵过(Linux版)的更多相关文章

  1. 快速自检电脑是否被黑客入侵过(Linux版)

    之前写了一篇快速自检电脑是否被黑客入侵过(Windows版), 这次就来写写Linux版本的. 前言 严谨地说, Linux只是一个内核, GNU Linux才算完整的操作系统, 但在本文里还是用通俗 ...

  2. 快速自检电脑是否被黑客入侵过(Windows版)

    我们经常会感觉电脑行为有点奇怪, 比如总是打开莫名其妙的网站, 或者偶尔变卡(网络/CPU), 似乎自己"中毒"了, 但X60安全卫士或者X讯电脑管家扫描之后又说你电脑" ...

  3. Mysql被黑客入侵及安全措施总结

    情况概述 今天登陆在腾讯云服务器上搭建的 MySQL 数据库,发现数据库被黑了,黑客提示十分明显. MySQL 中只剩下两个数据库,一个是information_schema,另一个是黑客创建的PLE ...

  4. dotnet 使用 Qpush 快速从电脑到手机推送文字

    在手机打字总不是方便,于是就有了 Qpush 这个工具,通过这个工具可以快速从电脑到手机推送文字. 但是这个工具没有找到客户端,于是我就给他写了一个库,通过这个库可以快速进行开发 先介绍QPush 快 ...

  5. Dappy如何防止DNS黑客入侵

    作者:Raphaël 译者注:Dappy是RChain生态中的DNS[域名系统(服务)协议].Dappy基于RChain的技术架构保障了域名系统的安全性. Dappy是一个用于文件和Web应用程序的去 ...

  6. 10大黑客专用的 Linux 操作系统

    上一篇:为什么不建议把数据库部署在Docker容器内? 今天列出一些最常用.最受欢迎的Linux发行版来学习黑客和渗透测试! 1. Kali Linux Kali Linux是最著名的Linux发行版 ...

  7. 像黑客一样使用 Linux 命令行

    前言 之前在博客园看到一篇介绍 IntelliJ IDEA 配置的文章,它里面用的是 gif 动态图片进行展示,我觉得很不错.所以在我今天以及以后的博文中,我也会尽量使用 gif 动图进行展示.制作 ...

  8. 像黑客一样使用Linux命令行(转载)

    阅读目录 前言 使用 tmux 复用控制台窗口 在命令行中快速移动光标 在命令行中快速删除文本 快速查看和搜索历史命令 快速引用和修饰历史命令 录制屏幕并转换为 gif 动画图片 总结 回到顶部 前言 ...

  9. 龙灵:特邀国内第一讲师“玄魂” 在线培训黑客神器Kali Linux

         如何成长为黑客.白帽子.网络工程师.渗透工程师?      国内这类型精英人才,大部分都是自学成才.他们成长的路上充满艰辛,还有更为漫长的学习过程.当然,幸运儿以外的大部分爱好者,被知识门槛 ...

随机推荐

  1. [Python Cookbook] Pandas Groupby

    Groupby Count # Party’s Frequency of donations nyc.groupby(’Party’)[’contb receipt amt’].count() The ...

  2. 写给嵌入式程序员的循环冗余校验(CRC)算法入门引导

    写给嵌入式程序员的循环冗余校验(CRC)算法入门引导 http://blog.csdn.net/liyuanbhu/article/details/7882789 前言 CRC校验(循环冗余校验)是数 ...

  3. [转]C++函数模板与模板函数

      1.函数模板的声明和模板函数的生成   1.1函数模板的声明 函数模板可以用来创建一个通用的函数,以支持多种不同的形参,避免重载函数的函数体重复设计.它的最大特点是把函数使用的数据类型作为参数. ...

  4. cocurrent包 原子性数据类型

    22. 原子性布尔 AtomicBoolean AtomicBoolean 类为我们提供了一个可以用原子方式进行读和写的布尔值,它还拥有一些先进的原子性操作,比如 compareAndSet().At ...

  5. 学号20175313 《数据库MySQL(课下作业,必做)》第十周

    目录 一.题目要求 二.需求分析 三.关键代码以及运行结果截图 任务一 任务二 任务三 任务四 四.代码实现过程中遇到的问题及其解决方法 五.码云链接 六.心得体会 一.题目要求 下载附件中的worl ...

  6. 推荐一款Java反编译器,比较好用

    转自:http://www.blogjava.net/xmatthew/archive/2008/10/28/237203.html 推荐一款Java反编译器,也使用了挺久的了,感觉还是很好用,就拿出 ...

  7. C++完美实现Singleton模式[转]

    Singleton模式是常用的设计模式之一,但是要实现一个真正实用的设计模式却也不是件容易的事情.1. 标准的实现class Singleton{public: static Singleton * ...

  8. 对Linux文件权限的理解

    755,775,777,ugoa 等分别代表什么含义?这些数字是如何得到的? 1.常用的linux文件权限: 444 -r--r--r-- 600 -rw------- 644 -rw-r--r-- ...

  9. 码云的GIT操作

    git操作 git initgit add .git commit -m ""git remote add origin https://git.coding.net/jessei ...

  10. 编译spark源码及塔建源码阅读环境

    编译spark源码及塔建源码阅读环境 (一),编译spark源码 1,更换maven的下载镜像: <mirrors> <!-- 阿里云仓库 --> <mirror> ...