大学生程序员被勒索比特币后,防御秘诀大公开 | 原力计划
黑客竟然找到我头上了?
这件事情已经过去很久了,是博主在大二时候的事,因为我经常参加一些比赛,主要是部署参加比赛的作品。突然有一天,我打开云服务器,竟然所有的文件都不能用了,每个文件都是相同的内容,说让我给这个钱包转比特币。查了查才知道被黑客勒索了。这是真事。
当时心里想:幸亏上面没有重要的东西。
其实我挺开心的,哈哈,竟然这么幸运能被黑客给勒索,竟然能被黑客给盯上,也是很幸福呀。
由于以前没有安全的意识,不知道你是否和我一样:
1、Linux内核安全模块关闭;
2、防火墙关闭,允许所有的数据报通过;
3、为了方便,一直使用root超级用户操作;
4、root超级用户的密码超级简单,是123456级别。
现在有了安全的意识,回想当初这事真的可怕,下面通过这篇文章来简单的聊一聊,遇到这样的事后,我们该怎么去做。
如果这篇文章对你有用,别忘记点个赞,评论一下哦。
前言
一、概述
Linux的发行版本有很多,手指头加上脚趾头也数不过来。至于为什么会造成这么多的发行版本,是因为Linux的内核是开源的,人人都可以开发出属于自己的Linux版本,关注我,下篇文章就带你开发自己的Linux版本。目前已有多种基于GNU/Linux的操作系统,例如Debian、SuSE、 Gentoo、 RedHat 和Mandriva。
其中Debian是一个广受称道、技术先进且有良好支持的发行版;而基于Debian的Ubuntu是一个自由、开源的操作系统,且有自己的发行版(每六个月发行一版),以用户为核心,简单易用( [能用]就行),承诺对每个发行版有18个月的安全升级支持。Ubuntu 自带最新版的Gnome桌面,拥有大量的服务和桌面应用程序。Ubuntu 十分注重系统的安全性,它采用sudo 工具,所有与系统相关的任务均使用此指令,并输人密码;比起传统以登人系统管理员账号进行管理工作有更佳的安全性。
二、我为什么喜欢Linux?
本文章选择在Deepin下远程在虚拟机中安装的Centos7的Linux发行版,带你浪迹天涯。因为我喜欢在Deepin下进行工作,但是服务器版本比较喜欢Centos系列的,从高一时(2014年)的Centos5.x开始接触的Linux,到现在(2020)我大三了,已经有了Centos8.x版本的。一直对Centos系列念念不忘,也是Centos的小粉丝一枚。
三、夸一夸Deepin版本
在这里不得不夸一夸Deepin这个发行版本,真的太赞了:
1、在Windows下:开机—点点点—再点点点—终于开启了。
2、在Deepin下:直接一个CTRL+ALT+T,调出来终端。
直接输入sudo docker start mysql57,哈哈,感觉人生到达了巅峰,好爽,好痛快呀。这是我使用Docker安装的MySql。
言归正传,开始过五关、斩六将
虽然攻击是不可避免的,但是可以防御或者说预防,有一句话不怕一万,就怕万一,放在这里,很合适。
有一次我的阿里云服务器,被黑客勒索了,给我要比特币。
图是网上找的,可以忽略,看看就好,不要在意,重要的是文章的内容,当时没来得及截图:
因为是个人的服务器,没有太大的价值,里面东西也没有重要的,防火墙关闭了,Linux内核机制也被我关掉了,root的密码也是很简单的。被黑客勒索,不亏。
一、防止猜测攻击
1、涨知识环节:什么是猜测攻击
如果你没系统的学过《网络安全》这门课程或者相关的课程的话,可能不知道具体的原理。有很多种方式,下面这是借鉴百度百科的:
(1) 字典攻击
因为多数人使用普通词典中的单词作为口令,发起词典攻击通常是较好的开端。词典攻击使用一个包含大多数词典单词的文件,用这些单词猜测用户口令。使用一部 1万个单词的词典一般能猜测出系统中70%的口令。在多数系统中,和尝试所有的组合相比,词典攻击能在很短的时间内完成。
(2) 强行攻击
许多人认为如果使用足够长的口令,或者使用足够完善的加密模式,就能有一个攻不破的口令。事实上没有攻不破的口令,这只是时间问题。如果有速度足够快的计算机能尝试字母、数字、特殊字符所有的组合,将最终能破解所有的口令。这种类型的攻击方式叫强行攻击。使用强行攻击,先从字母a开始,尝试aa、ab、 ac等等,然后尝试aaa、aab、aac ……。
攻击者可以利用分布式攻击。如果攻击者希望在尽量短的时间内破解口令,他不必购买大量昂贵的计算机。他会闯入几个有大批计算机的公司并利用他们的资源破解口令。
(3)NTCrack
NTCrack是UNIX破解程序的一部分,但是在NT环境下破解。NTCrack与UNIX中的破解类似,NTCrack在功能上非常有限。它不像其他程序一样提取口令哈希,它和NTSweep的工作原理类似。必须给NTCrack一个user id和要测试的口令组合,然后程序会告诉用户是否成功。
(4)PWDump2
PWDump2不是一个口令破解程序,它能用来从SAM数据库中提取口令哈希。L0phtcrack已经内建了这个特征,但是PWDump2还是很有用的。
首先,它是一个小型的、易使用的命令行工具,能提取口令哈希;其次,很多情况下L0phtcrack的版本不能提取口令哈希。如SYSTEM是一个能在NT下运行的程序,为SAM数据库提供了很强的加密功能,如果SYSTEM在使用,L0phtcrack就无法提取哈希口令,但是PWDump2 还能使用;而且要在Windows2000下提取哈希口令,必须使用PWDump2,因为系统使用了更强的加密模式来保护信息。
2、设置口令最小长度和最短使用时间
口令是系统中认证用户的主要手段,系统安装时默认的口令最小长度通常为5,但为保证口令不易被猜测攻击,可增加口令的最小长度,例如至少为8。为此,需修改文件/etc/login. defs中参数PASS_MIN_LEN。同时应限制口令使用时间,保证定期更换口令,建议修改参数PASS_MIN_DAYS。具体步骤如下:
(1)设置口令最小长度
可以通过grep过滤一下,查看出:
PASS_MIN_LEN默认是5
# PASS_MIN_LEN Minimum acceptable password length.
PASS_MIN_LEN 5
[root@truedei-centos ~]#
[root@truedei-centos ~]#
-rw-r--r--. 1 root root 2028 11月 4 2016 /etc/login.defs
[root@truedei-centos ~]#
修改成想修改的8:
保存即可。
(2)设置最短使用时间
口令最短使用时间是由PASS_MIN_DAYS参数决定的,所以要修改PASS_MIN_DAYS参数。
单位:天
可以看到默认值为0,则永远不会过期。
# PASS_MIN_DAYS Minimum number of days allowed between password changes.
PASS_MIN_DAYS 0
[root@truedei-centos ~]#
本次修改的是30天过期:
二、防止用户离开忘记注销账户带来的隐患
如果用户离开时忘记注销账户,则可能给系统安全带来隐患。
1、设置用户超时注销
可通过修改/etc/profile文件,保证账户在一 段时间没有操作后,自动从系统注销。用vim等编辑器打开并编辑文件/etc/profile,在/etc/profile文件中增加一行“TMOUT=600”,则所有用户将在600秒无操作后自动注销。
2、测试
如果当场想测试,可以修改成30秒等,然后生效:
[root@truedei-centos ~]#
3、解决环境遍历可更改的问题
不过这样还是不安全,因为现在的这个变量是可以更改的:
[root@truedei-centos ~]# echo $TMOUT #原来的时间
30
[root@truedei-centos ~]#
[root@truedei-centos ~]#
[root@truedei-centos ~]# TMOUT=600 #更改值
[root@truedei-centos ~]#
[root@truedei-centos ~]# echo $TMOUT #更改之后的
600
[root@truedei-centos ~]#
加上一句readonly TMOUT即可。
[root@truedei-centos ~]# cat /etc/profile |grep TMOUT
export TMOUT=600
readonly TMOUT
[root@truedei-centos ~]#
[root@truedei-centos ~]#
说明:这种方式是不可擦除的,就算你删除了之后,对于当前的shell也是不行的,必须重新登录即可。
[root@truedei-centos ~]# vim /etc/profile
[root@truedei-centos ~]#
[root@truedei-centos ~]# cat /etc/profile |grep TMOUT
export TMOUT=600
readonly TMOUT
[root@truedei-centos ~]#
[root@truedei-centos ~]# echo $TMOUT
600
[root@truedei-centos ~]#
[root@truedei-centos ~]# TMOUT=700
[root@truedei-centos ~]# echo $TMOUT
700
[root@truedei-centos ~]#
[root@truedei-centos ~]#
[root@truedei-centos ~]# source /etc/profile
[root@truedei-centos ~]#
[root@truedei-centos ~]# echo $TMOUT
600
[root@truedei-centos ~]#
[root@truedei-centos ~]# TMOUT=700
bash: TMOUT: 只读变量
[root@truedei-centos ~]#
三、防止黑客利用系统重要文件
1、概念
防止黑客利用系统重要文件捣鬼的话,可以禁止访问重要的文件。
对系统中的某些关键性文件如/etc/services,/etc/passwd,/etc/shadow等,可以采取修改这些文件的属性,防止意外修改和被普通用户查看。
2、实战
例如我系统中有一个脚本,是很重要的:
[root@truedei-centos ~]#
[root@truedei-centos ~]# ll /etc/ceshi.sh
-rw-r--r-- 1 root root 0 5月 13 06:20 /etc/ceshi.sh
[root@truedei-centos ~]#
如果不懂的同学,可以看一下,我写的这个文章:Linux权限管理(用户权限、用户组权限、文件权限、目录权限) ,为了减小篇幅这里就不在啰嗦了。
[root@truedei-centos ~]#
[root@truedei-centos ~]# ll /etc/ceshi.sh
-rw------- 1 root root 0 5月 13 06:20 /etc/ceshi.sh
[root@truedei-centos ~]#
[root@truedei-centos ~]# useradd zhenghui
[root@truedei-centos ~]#
为了好测试,我新建了一个用户zhenghui:
[root@truedei-centos ~]#
[root@truedei-centos ~]# chown zhenghui.zhenghui /etc/ceshi.sh
chown: 正在更改"/etc/ceshi.sh" 的所有者: 不允许的操作
[root@truedei-centos ~]#
[root@truedei-centos ~]# ll /etc/ceshi.sh
-rw------- 1 root root 0 5月 13 06:20 /etc/ceshi.sh
[root@truedei-centos ~]#
[root@truedei-centos ~]#
[root@truedei-centos ~]# chown zhenghui.zhenghui /etc/ceshi2.sh
[root@truedei-centos ~]#
[root@truedei-centos ~]# ll /etc/ |grep ceshi
-rw-r--r-- 1 zhenghui zhenghui 0 5月 13 06:27 ceshi2.sh
-rw------- 1 root root 0 5月 13 06:20 ceshi.sh
[root@truedei-centos ~]#
防止黑客利用远程访问来搞事情
1、概念
在开发中,我们总会使用到Linux,一般我们都会使用securtcrt或者xshell等软件进行远程登录,这样虽然会给我们带来很多便捷,但是同样会存在一定的风险。有很多人专门通过重复的扫描试图破解我们的Linux开发机,从而获取免费的“肉鸡”。因此我们可以通过设置hosts.allow和hosts.deny文件来使我们个人的linux开发机更安全。
2、实战
在Ubuntu和Centos中可通过/etc/hosts.allow和/etc/hosts.deny这两个文件允许或禁止远程主机对本地服务的访问。通常的做法如下。
如果配置错的话,目前我能想到的办法就只有重装系统了,别问我为什么知道。
可以看到:
-rw-r--r--. 1 root root 370 6月 7 2013 /etc/hosts.allow
-rw-r--r--. 1 root root 460 6月 7 2013 /etc/hosts.deny
[root@truedei-centos ~]#
修改如下:
意思就是拒绝所有
ssh_exchange_identification: read: Connection reset by peer
truedei@truedei:~$
我们配置允许的配置文件/etc/hosts.allow
下图可以看到我的某一个网卡的ip是192.168.9.108,那么就修改成只允许我这个ip访问ssh服务吧。
3、测试
这就很激动了
防止黑客利用Shell命令记录来搞鬼
1、涨知识了(历史记录的三种查询方式)
为了模拟黑客操作,我远程到了我的阿里云服务器上
方法1.↑↓键:
↑,向前查找(更早输入的命令);
↓,向后查找(更新输入的命令);
方法2.history命令:
显示近期输入的1000条命令,这些命令,存储在~/.bash_history文件中;
如果想要改变这个值的大小,直接为环境变量HISTSIZE赋值,如:HISTSIZE=2000;
方法3.ctrl+r搜索:
在提示符后面,输入,要搜索的关键字:
(reverse-i-search)`’:sed
就会自动联想出,包含此关键字的历史命令:
例如我输入了html,就会联想到我的某一次的操作:
然后回车就可以调用:
通过cat /etc/profile |grep HIS可以看到默认为1000
2、实战
其实这些历史命令被藏在了用户的目录下:
[root@truedei-centos ~]# cat ~/.bash_history
[root@truedei-centos ~]# vim /etc/profile
重新登录一下,重新执行以下,发现只有近30条的历史命令了。
在Linux中用户注销时会执行一个文件,文件是/home/用户名/.bash_logout
编辑.bash_logout:
[root@truedei-centos ~]# vim ~/.bash_logout
[root@truedei-centos ~]#
[root@truedei-centos ~]# cat ~/.bash_logout
rm -r ~/.bash_history
[root@truedei-centos ~]#
解决办法:
在命令前面加上/的意思是强制执行,很好使的,但是自己要注意分寸哦。
防止黑客利用超级用户的权利干坏事
你是否听过周杰伦的《告白气球》,其中有一个歌词是拥有你就拥有全世界,拿来形容root用户太合适了。
root是所有Linux系统保护的重点,由于它权力无限,因此最好不要轻易授权超级用户。但有些程序的安装和维护工作要求必须有超级用户权限,在这种情况下,可以利用其他工具让这类用户有部分超级用户权限。Sudo就是这类工具。
Sudo程序允许一般用户经过组态设定后,以用户自己的密码再登录一次, 取得超级用户权限,但只能执行有限的几条指令,例如,应用Sudo后,可以让管理磁带备份的管理人员每天按时登录到系统中,取得超级用户权限去执行文档备份工作,但却没有特权去作其他只有超级用户才能做的工作。Sudo不但限制了用户的权限,而且还将每次使用Sudo所执行的指令记录下来,不管该指令的执行是成功还是失败。从Sudo的日志中,可以追踪到谁做了什么以及改动了系统的哪些部分。
降低黑客扫描到端口号的几率
拿ssh来说:更改SSH服务的端口号。
ssh服务的配置文件:/etc/ssh/sshd_config。
将ssh的Port改为1000以上的端口,以便降低端口被扫描的几率。
#Port 22
#GatewayPorts no
[root@truedei-centos ~]#
1、何为死亡之ping?
一般玩电脑的对这个ping命令很熟悉。ping是Windows和Linux自带的一种命令工具。一般是用来检测网络是否通畅,是否存在网络连接问题等。
那怎样运用呢?
以WinXP为例,在一种叫做命令提示符的窗口中运行。(在Win9x中叫DOS窗口)单击“开始”,点击“运行”,输入“CMD”,打开命令提示符。
先说几个简单的。
ping自己的主机IP
例如IP地址为:192.168.9.222。则执行命令ping 192.168.9.222。如果网卡安装配置没有问题,则应有类似下列显示:
PING 192.168.9.222 (192.168.9.222) 56(84) bytes of data.
64 bytes from 192.168.9.222: icmp_seq=1 ttl=64 time=0.089 ms
64 bytes from 192.168.9.222: icmp_seq=2 ttl=64 time=0.118 ms
64 bytes from 192.168.9.222: icmp_seq=3 ttl=64 time=0.112 ms
64 bytes from 192.168.9.222: icmp_seq=4 ttl=64 time=0.139 ms
^C
--- 192.168.9.222 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 0.089/0.114/0.139/0.020 ms
[root@truedei-centos ~]#
PING 192.168.9.1 (192.168.9.1) 56(84) bytes of data.
64 bytes from 192.168.9.1: icmp_seq=1 ttl=64 time=0.923 ms
64 bytes from 192.168.9.1: icmp_seq=2 ttl=64 time=0.898 ms
64 bytes from 192.168.9.1: icmp_seq=3 ttl=64 time=0.964 ms
64 bytes from 192.168.9.1: icmp_seq=4 ttl=64 time=0.888 ms
^C
--- 192.168.9.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3012ms
rtt min/avg/max/mdev = 0.888/0.918/0.964/0.036 ms
[root@truedei-centos ~]#
Ping远程IP
这一命令可以检测本机能否正常访问Internet。比如远程IP地址为:www.baidu.com、8.8.8.8。执行命令:ping www.baidu.com,如果屏幕显示:
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=52 time=49.6 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=52 time=47.9 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=52 time=46.3 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=52 time=51.0 ms
^C
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3014ms
rtt min/avg/max/mdev = 46.341/48.748/51.086/1.806 ms
[root@truedei-centos ~]#
[root@truedei-centos ~]# ping www.baidu.com
PING www.wshifen.com (103.235.47.103) 56(84) bytes of data.
64 bytes from 103.235.47.103 (103.235.47.103): icmp_seq=1 ttl=47 time=389 ms
64 bytes from 103.235.47.103 (103.235.47.103): icmp_seq=2 ttl=47 time=390 ms
64 bytes from 103.235.47.103 (103.235.47.103): icmp_seq=4 ttl=47 time=388 ms
64 bytes from 103.235.47.103 (103.235.47.103): icmp_seq=5 ttl=47 time=388 ms
^C
--- www.wshifen.com ping statistics ---
5 packets transmitted, 4 received, 20% packet loss, time 4020ms
rtt min/avg/max/mdev = 388.518/389.196/390.224/0.663 ms
[root@truedei-centos ~]#
进入正题(何为死亡之ping?)
2009年七月份墨尔本电影节网站被黑,黑客用的方法就是ping攻击。
命令:[PING -L 65500 -T IP地址]
上面的命令就是我说的“死亡之ping”,其中涉及到两个参数, -L 和 -T
-l :定义数据包的大小;
-t:向一个固定IP不停地PING ,通俗点:不停地发送一定大小的ICMP数据报。停止该命令的方法CTRL+C。(注意在linux下默认就是一直ping的)
如果你只有一台电脑也许没有什么效果,但如果有许多电脑(比如1千)那么就可以使对方完全瘫痪。(缺陷:现在大部分电脑都是通过路由来上网的,这种上网方式比使用猫上网安全,安全的原因是前者的IP是动态的)。
最重要一点,你首先得知道对方IP。获取IP的方法有很多,比如使用彩虹QQ,IPsniper等,还有一个命令[netstat -n],具体怎么用就免了。至于获得对方IP地址还有什么用处,你自己想吧,这里就不引导你做坏事了。
2、防止其他主机ping本机
(1)允许ping操作:
A.临时允许PING操作的命令为:echo 0 >/proc/sys/net/ipv4/icmp_echo_ignore_all
B.永久允许PING配置方法。
/etc/sysctl.conf 中增加一行
net.ipv4.icmp_echo_ignore_all=0
(2)禁止ping操作:
A.临时禁止PING的命令为:echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all
B.永久禁止PING配置方法。
/etc/sysctl.conf 中增加一行
net.ipv4.icmp_echo_ignore_all=1
(3)使用防火墙禁止(或者丢弃)icmp包:
1、首先启动Iptables服务
2、然后配置规则:iptables -A INPUT -p icmp -j DROP
3、测试
没配置拒绝前:
会发现一直在等待,就哦了
防止被黑客登录时看到系统相关信息
如果希望某个人远程登录到服务时不显示操作系统和版本信息。就可以通过修改相关的配置即可。
1、实战模拟黑客远程登录
这是登录到我的阿里云的服务器上:
登录到自己的虚拟机:
2、实战
Linux可以设置登录前后的欢迎信息,虽然没啥技术含量,但却是非常实用的一个小技巧。实现登录消息的功能,可以修改3个文件。
1、/etc/issue 本地登陆显示的信息,本地登录前
2、/etc/issue.net 网络登陆显示的信息,登录后显示,需要由sshd配置
3、/etc/motd 常用于通告信息,如计划关机时间的警告等,登陆后的提示信息
(1) /etc/issue文件
可以来看一下/etc/issue中的内容:
[root@truedei-centos ~]# cat /etc/issue
\S
Kernel \r on an \m
[root@truedei-centos ~]#
[root@truedei-centos ~]# man pam_issue
[root@truedei-centos ~]#
\l//显示当前tty的名字即第几个tty;
\m //显示硬体的架构 (i386/i486/i586/i686…);
\n //显示主机的网路名称;
\o //显示 domain name;
\r //当前系统的版本 (相当于 uname -r)
\t //显示本地端时间的时间;
\u //当前有几个用户在线。
\s //当前系统的名称;
\v //当前系统的版本。
(2)/etc/motd文件
至于文件/etc/motd,(motd即motd即message of today布告栏信息的缩写) 则是在每次用户登录时,motd文件的内容会显示在用户的终端。
系统管理员可以在文件中编辑系统活动消息,例如:管理员通知用户系统何时进行软件或硬件的升级、何时进行系统维护等。如果shell支持中文,
还可以使用中文,这样看起来更易于了解。/etc/motd缺点是,现在许多用户登录系统时选择自动进入图形界面,所以这些信息往往看不到。
issue与motd文件主要区别在于:当一个用户过本地文本设备(如本地终端,本地虚拟控制台等)登录/etc/issue的文件内容显示在login提示符之前,而/etc/motd内容显示在用户成功登录系统之后。
(3)/etc/issue.net文件
issue.net文件(只针对网络用户)。
–若通过远程本文设备(如通过ssh或telnet等)登录,则显示该文件的内容。
使用ssh登录时,会不会显示issue信息由sshd服务的sshd_config的Banner属性配置决定,但本人在测试时发现虽设置了Banner属性但并未对issue.net中的\r和\m等内容进行转义,而是直接显示。
版权声明:本文为CSDN博主「TrueDei」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_17623363/article/details/106106970
更多精彩推荐
☞亚马逊创始人或成地球首位万亿富豪,设计“女人流程图”找对象,不一般的贝佐斯!
☞潘石屹 Python 考试成绩 99 分,网友:还有一分怕你骄傲
☞商务部回应美国对华为出口管制新规;苹果5亿美元和解 iPhone 降速门集体诉讼;Deno 1.0 发布 | 极客头条
☞Go远超Python,机器学习人才极度稀缺,全球16,655位程序员告诉你这些真相
☞超级账本Hyperledger Fabric中的Protobuf到底是什么?