快速自检电脑是否被黑客入侵过(Linux版)
之前写了一篇快速自检电脑是否被黑客入侵过(Windows版), 这次就来写写Linux版本的.
前言
严谨地说, Linux只是一个内核, GNU Linux
才算完整的操作系统, 但在本文里还是用通俗的叫法,
把Ubuntu
,Debian
,RedHat
,CentOS
,ArchLinux
等发行版都统称为Linux
.
本文里所说的方法不仅对Linux的发行版适用, 部分方法对Mac OSX
操作系统也是适用的.
异常的帐号和权限
如果黑客曾经获得过命令运行的机会, 对方往往会想要将这个机会持续下去, 业内称之为持久化(persistence)
.
而创建后门帐号, 往往是一个持久化的途径.
检查异常帐号
搜寻用户
cat /etc/passwd
可以看到当前系统中的所有用户和对应的组信息, 如果帐号太多一眼看不过来,
我通常会用下述方法筛选:
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是基于事件的,用来取代古老的/sbin/init进程来处理任务和服务自启动的方法.
查看该类型的自启动文件可以用以下命令:
- 查看所有自启动项目:
initctl list
- 查看某个自启动项目:
initctl show-config evil
SystemV
SystemV就是常用的service start/stop/status xxx.service
命令背后的服务管理系统.
查看该类型的自启动文件可以用以下命令:
- 查看自启动脚本:
ls /etc/init.d/
- 查看运行级别的符号链接:
ls /etc/rc*.d/
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]表示只有当第一个脚本存在时候才会执行. 用流程图表示如下:
关于登录/非登录shell以及交互/非交互shell的内容可以参考网上的其他介绍, 这里就不展开了.
只要知道自己的shell初始化所执行的文件顺序, 并检查这些文件看是否有可疑命令, 从而才能发现异常信息.
应用级别的自启动
要找到所有可疑的自启动项是困难的, 有经验攻击者可以修改现有的自启动脚本, 额外拉起命令,
从而减少被发现的风险. 一些Linux桌面版本也会负责运行类似的自启动命令, 比如我最爱的xfce,
在Settings -> Session Starup -> Application Autostart
就可以添加自启动的应用.
异常的记录
异常的命令历史记录
一般而言, 黑客获取shell之后会在上面执行某些命令, 我们可以通过history
命令来查看曾经运行过的命令.
或者直接查看~/.bash_history
文件. 聪明的黑客干完坏事也许会清理痕迹, 但如果发现history被恶意清除,
或者被异常篡改, 那也足以给我们警示的信号了.
异常的日志记录
日志, 尤其是系统日志, 是我们绝佳的帮手, 下面一些命令可以用来读取日志文件并输出相关信息:
- 查看每个用户最近的登录时间和ip:
lastlog
- 查看每个用户的登录记录:
last
- 查看每个用户的登录尝试(包括失败的)记录:
lastb
- 查看当前登录的用户,ip以及正在执行的命令:
w
当然, 有心的攻击者也会在这些命令中隐藏自己的痕迹, 比如使用小工具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版的自检略为详细.
正所谓'未知攻,焉知防', 本文很多自检方法也是根据笔者日常的红队经验得到的,
希望能对提高小伙伴们的安全意识和防护能力有所帮助吧.
本文首发FreeBuf, 转载请注明出处
博客地址: PansLabyrinth
快速自检电脑是否被黑客入侵过(Linux版)的更多相关文章
- 快速自检电脑是否被黑客入侵过(Windows版)
我们经常会感觉电脑行为有点奇怪, 比如总是打开莫名其妙的网站, 或者偶尔变卡(网络/CPU), 似乎自己"中毒"了, 但X60安全卫士或者X讯电脑管家扫描之后又说你电脑" ...
- 快速自检电脑是否被黑客入侵过(Linux版)
前言 严谨地说, Linux只是一个内核, `GNU Linux`才算完整的操作系统, 但在本文里还是用通俗的叫法, 把`Ubuntu`,`Debian`,`RedHat`,`CentOS`,`Arc ...
- Mysql被黑客入侵及安全措施总结
情况概述 今天登陆在腾讯云服务器上搭建的 MySQL 数据库,发现数据库被黑了,黑客提示十分明显. MySQL 中只剩下两个数据库,一个是information_schema,另一个是黑客创建的PLE ...
- dotnet 使用 Qpush 快速从电脑到手机推送文字
在手机打字总不是方便,于是就有了 Qpush 这个工具,通过这个工具可以快速从电脑到手机推送文字. 但是这个工具没有找到客户端,于是我就给他写了一个库,通过这个库可以快速进行开发 先介绍QPush 快 ...
- Dappy如何防止DNS黑客入侵
作者:Raphaël 译者注:Dappy是RChain生态中的DNS[域名系统(服务)协议].Dappy基于RChain的技术架构保障了域名系统的安全性. Dappy是一个用于文件和Web应用程序的去 ...
- 10大黑客专用的 Linux 操作系统
上一篇:为什么不建议把数据库部署在Docker容器内? 今天列出一些最常用.最受欢迎的Linux发行版来学习黑客和渗透测试! 1. Kali Linux Kali Linux是最著名的Linux发行版 ...
- 像黑客一样使用 Linux 命令行
前言 之前在博客园看到一篇介绍 IntelliJ IDEA 配置的文章,它里面用的是 gif 动态图片进行展示,我觉得很不错.所以在我今天以及以后的博文中,我也会尽量使用 gif 动图进行展示.制作 ...
- 像黑客一样使用Linux命令行(转载)
阅读目录 前言 使用 tmux 复用控制台窗口 在命令行中快速移动光标 在命令行中快速删除文本 快速查看和搜索历史命令 快速引用和修饰历史命令 录制屏幕并转换为 gif 动画图片 总结 回到顶部 前言 ...
- 龙灵:特邀国内第一讲师“玄魂” 在线培训黑客神器Kali Linux
如何成长为黑客.白帽子.网络工程师.渗透工程师? 国内这类型精英人才,大部分都是自学成才.他们成长的路上充满艰辛,还有更为漫长的学习过程.当然,幸运儿以外的大部分爱好者,被知识门槛 ...
随机推荐
- 解决No enclosing instance of type * is accessible
写一个内部类,并在构造函数中初始化时,遇到报错,搜索问题后发现,有网友出现过类似的问题,下面这个是说的浅显明白的,并确实解决了问题.于是,以下内容照搬过来,不再多费键盘了. public class ...
- Audio Source组件及相关API
Audio Source:声音组件.需要与 Audio Listener 配合使用,Main Camera 会默认有 Audio Lisetener. Audio Clip:声音片段.指定需要播放的音 ...
- 撸起袖子加油干 golang入坑系列
还是提醒一下,里面有段子,不都是技术. 冲着技术来的,慢走不送.没有版权,但可以给我发邮件(ztao8607@gmail.com) 在我的发小朋友中,终于最后一位打光棍的要结婚了. 说实话,真心不容易 ...
- Listview嵌套Listview
今天做项目,打算模仿淘宝的订单管理,需要Listview嵌套Listview,都是两个控件都是沿着一个方向滑动的,嵌套在一起不幸福,以下是解决方案,打个笔记,以后估计还得用: 其中onMeasure函 ...
- 对于Hibernate的底层浅谈
哇,我发现忙起来真的是没有时间来写,最近在学框架,感觉特别有兴趣,对于框架的感激就是又恨又爱的感觉,hibernate,没有研究太深,模拟的写了一点底层的实现,其实就是发射吧,我没有追踪源码去看,就是 ...
- 【原创】python爬虫获取网站数据并存入本地数据库
#coding=utf-8 import urllib import re import MySQLdb dbnumber = MySQLdb.connect('localhost', 'root', ...
- Filter、Listener 学习总结
今天我们来介绍 Filter.Listener 这两个模块一些简单的知识和应用,接下来我们开始我们的正题 ! 1. Filter(过滤器) 1.1 对 Servlet 容器调用 Servlet 的过程 ...
- ElasticSearch 学习记录之集群分片内部原理
分片内部原理 分片是如何工作的 为什么ES搜索是近实时性的 为什么CRUD 操作也是实时性 ES 是怎么保证更新被持久化时断电也不丢失数据 为什么删除文档不会立即释放空间 refresh, flush ...
- 移动 云MAS 发短信 .net HTTP 请求
本人开发移动云MAS .net Http 请求 代码如下 using Newtonsoft.Json.Linq; using System; using System.Collections.Gen ...
- SharePoint 2010 Url Shortener --SharePoint 2010 短URL生成器
SharePoint 2010 Url Shortener --SharePoint 2010 短URL生成器 项目描写叙述 本项目加入了这种功能.在SP站点中能够生成短URLs. 这些URLs指向列 ...