邓老师 发布的文章
PHP openssl生成数字证书密钥
实际可用的CA签名程序:ca_sign.php.txt
实例演示:
关于PHP生成证书密钥的资料真是好少啊,查了半天,最终还是在官方文档找到了相关资料,又根据自己的理解,整理成了以下代码,分成两部分:生成证书密钥、加密解密数据。直接复制下来做成两个文件运行就好啦。已经写了详细的注释,相信PHP程序员都能看得懂。
generate.php
$dn = array(
"countryName" => 'CN', //所在国家名称
"stateOrProvinceName" => 'GD', //所在省份名称
"localityName" => 'GZ', //所在城市名称
"organizationName" => 'DGQ', //注册人姓名
"organizationalUnitName" => 'GDEC', //组织名称
"commonName" => 'www.dgq.com', //公共名称
"emailAddress" => 'user@domain.com' //邮箱
);
$privkeypass = '111111'; //私钥密码
$numberofdays = 3650; //有效时长
$cerpath = "./test.cer"; //生成证书路径
$pfxpath = "./test.pfx"; //密钥文件路径
//生成证书
$cacert = file_get_contents("./cacert.cer"); //CA证书文件
$cakey = array(file_get_contents("./private/cakey.pem"),NULL); //CA私钥文件
$privkey = openssl_pkey_new( array(" private _key_bits" => 2048, "private_key_type" => OPENSSL_KEYTYPE_ RSA ) );
$csr = openssl_csr_new($dn, $privkey, array('digest_alg' => 'sha256'));
//$sscert = openssl_csr_sign($csr, null, $privkey, $numberofdays); //自签证书
$sscert = openssl_csr_sign($csr, $cacert, $cakey, $numberofdays,array('digest_alg' => 'sha256')); //CA签发证书
openssl_x509_export_to_file($sscert, $cerpath); //导出证书到文件
openssl_pkcs12_export_to_file($sscert, $pfxpath, $privkey, $privkeypass); //生成密钥文件
crypt.php
//私钥加密
$cer_key = file_get_contents($pfxpath); //获取密钥内容
openssl_pkcs12_read($cer_key, $certs, $privkeypass);
openssl_sign($data, $signMsg, $certs['pkey'],OPENSSL_ALGO_SHA1); //注册生成加密信息
$signMsg = base64_encode($signMsg); //base64转码加密信息
echo $signMsg;
//公钥解密
$cer_key = file_get_contents($cerpath); //获取证书内容
$unsignMsg=base64_decode($signMsg);//base64解码加密信息
$cer = openssl_x509_read($cer_key); //读取公钥
$res = openssl_verify($data, $unsignMsg, $cer); //验证
echo $res; //输出验证结果,1:验证成功,0:验证失败
一个简单的加密解密类:
class RsaCrypt {
const PRIVATE_KEY_FILE_PATH = './rsa_private_key.pem';
const PUBLIC_KEY_FILE_PATH = './rsa_public_key.pem';
public static function encode($orignData) {
//密钥文件的路径
$privateKeyFilePath = self::PRIVATE_KEY_FILE_PATH;
extension_loaded('openssl') or die('php需要openssl扩展支持');
(file_exists($privateKeyFilePath)) or die('密钥的文件路径不正确');
//生成Resource类型的密钥,如果密钥文件内容被破坏,openssl_pkey_get_private函数返回false
$privateKey = openssl_pkey_get_private(file_get_contents($privateKeyFilePath));
($privateKey) or die('密钥不可用');
//加密以后的数据,用于在网路上传输
$encryptData = '';
///////////////////////////////用私钥加密////////////////////////
if (openssl_private_encrypt($orignData, $encryptData, $privateKey)) {
return $encryptData;
} else {
die('加密失败');
}
}
public static function decode($encryptData) {
//公钥文件的路径
$publicKeyFilePath = self::PUBLIC_KEY_FILE_PATH;
extension_loaded('openssl') or die('php需要openssl扩展支持');
(file_exists($publicKeyFilePath)) or die('公钥的文件路径不正确');
//生成Resource类型的公钥,如果公钥文件内容被破坏,openssl_pkey_get_public函数返回false
$publicKey = openssl_pkey_get_public(file_get_contents($publicKeyFilePath));
($publicKey) or die('公钥不可用');
//解密以后的数据
$decryptData = '';
///////////////////////////////用公钥解密////////////////////////
if (openssl_public_decrypt($encryptData, $decryptData, $publicKey)) {
return $decryptData;
} else {
die('解密失败');
}
}
}
特别说明:
x509,公钥证书,只有公钥。
p7,签名或加密。可以往里面塞x509,同时没有签名或加密内容。
p12,含有私钥,同时可以有公钥,有口令保护。
p7的作用就是电子信封。
X509是基本规范
P7和P12是两个实现规范,P7是数字信封,P12是带有私钥的证书规范。
x509是数字证书的规范,P7和P12是两种封装形式。比如说同样的电影,有的是avi格式,有的是mpg,大概就这个意思。
P7一般是把证书分成两个文件,一个公钥一个私钥,有PEM和DER两种编码方式。PEM比较多见,就是纯文本的,P7一般是分发公钥用,看到的就是一串可见字符串,扩展名经常是.crt,.cer,.key等。DER是二进制编码。
P12是把证书压成一个文件,.pfx 。主要是考虑分发证书,私钥是要绝对保密的,不能随便以文本方式散播。所以P7格式不适合分发。.pfx中可以加密码保护,所以相对安全些。
在实践中要中,用户证书都是放在USB Key中分发,服务器证书经常还是以文件方式分发。服务器证书和用户证书,都是X509证书,就是里面的属性有区别。
X509 是证书规范
PKCS#7 是消息语法 (常用于数字签名与加密)
PKCS#12 个人消息交换与打包语法 (如.PFX .P12)打包成带公钥与私钥
CC攻击原理及防范方法
openssl创建在线吊销证书列表服务OCSP
set up ocsp using openssl
Assuming that you already have an OpenSSL Certificate Authority set up, you will need to make a couple of changes to your openssl.cnf file. Add a new line to the usr_cert stanza
[ usr_cert ]
authorityInfoAccess = OCSP;URI:http://
create a new stanza
[ v3_OCSP ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = OCSPSigning
For this example, the OCSP server will be running on ca.isrlabs.net on port 8888, so the authorityInfoAccess line will look like:
authorityInfoAccess = OCSP;URI:http://ca.isrlabs.net:8888
This line will add a new attribute to issued certs that tells clients where the CA’s OCSP server is located so it can check the validity of the cert. The new v3 template assigns a neccesary attribute “OCSPSigning” to any certificate issued under this template. We will need to issue an OCSP signing certificate to the OCSP server with the OCSPSigning attribute, otherwise signature verification will fail when a cert is being checked. This is the first thing we will do:
openssl req -new -nodes -out ca.isrlabs.net.csr -keyout ca.isrlabs.net.key -extensions v3_OCSP
Sign the request with the CA signing key:
openssl ca -in auth.isrlabs.net.csr -out auth.isrlabs.net.crt -extensions v3_OCSP
OpenSSL should show the signing request, look for this in the X509v3 extensions:
X509v3 Extended Key Usage:
OCSP Signing
Sign and commit the request. Now, issue a throwaway cert and sign it
openssl req -new -nodes -out dummy.isrlabs.net.csr -keyout dummy.isrlabs.net.key
openssl ca -in dummy.isrlabs.net.csr -out dummy.isrlabs.net.crt
Next, start up the OCSP server.
openssl ocsp -index /etc/pki/CA/index.txt -port 8888 -rsigner ca.isrlabs.net.crt -rkey ca.isrlabs.net.key -CA /etc/pki/CA/cacert.pem -text -out log.txt
Once the dummy cert has been been issued and the OCSP server started, we can test the cert using the “openssl ocsp” command. To verify a certificate with OpenSSL, the command syntax is:
openssl ocsp -CAfile
So to test our dummy file:
openssl ocsp -CAfile cacert.pem -issuer cacert.pem -cert dummy.isrlabs.net.crt -url http://ca.isrlabs.net:8888 -resp_text
There’s going to be a large block of text flooding the screen. Some of the more important text:
OCSP Response Data:
OCSP Response Status: successful (0×0)
Response Type: Basic OCSP Response
…
Certificate ID:
Hash Algorithm: sha1
Issuer Name Hash: 922CD93C975EDC121DB25B1A55BA9B544E06F9B3
Issuer Key Hash: 322A8DBF79BE1A934543DC4F24FC69220A2803BA
Serial Number: 06
Cert Status: good
…
Response verify OK
dummy.isrlabs.net.crt: good
This Update: Feb 27 00:55:54 2012 GMT
Now revoke the cert, regenerate the CRL and restart the OCSP server (the server must be restarted every time a cert is issued or revoked). If the OCSP signing certificate was not issued with the OCSPSigning attribute, OpenSSL will gripe that the verification did not work properly. Reissue the signing cert with the OCSPSigning attribute for the server.
openssl ca -revoke /etc/pki/CA/newcerts/06.pem
openssl ca -gencrl -out /etc/pki/CA/crl.pem
Now we can verify the certificate again:
openssl ocsp -CAfile /etc/pki/CA/cacert.pem -issuer /etc/pki/CA/cacert.pem -cert dummy.isrlabs.net.crt -url http://ca.isrlabs.net:8888 -resp_text
OCSP Response Status: successful (0×0)
Response Type: Basic OCSP Response
…
Certificate ID:
Hash Algorithm: sha1
Issuer Name Hash: 922CD93C975EDC121DB25B1A55BA9B544E06F9B3
Issuer Key Hash: 322A8DBF79BE1A934543DC4F24FC69220A2803BA
Serial Number: 06
Cert Status: revoked
Revocation Time: Feb 27 01:07:36 2012 GMT
This Update: Feb 27 01:12:08 2012 GMT
…
Response verify OK
dummy.isrlabs.net.crt: revoked
This Update: Feb 27 01:12:08 2012 GMT
Revocation Time: Feb 27 01:07:36 2012 GMT
If you were to install this cert on a website, and the CA certificate was installed, any modern browser should refuse to connect to the site as the cert has been revoked.
in
openssl req -new -nodes -out ca.isrlabs.net.csr -keyout ca.isrlabs.net.key -extensions v3_OCSP
openssl ca -in auth.isrlabs.net.csr -out auth.isrlabs.net.crt -extensions v3_OCSP
should not ca.isrlabs.net.csr on first command match
auth.isrlabs.net.csr ?
I matched both names in the command, but when I do
openssl ca -in isrlabs.csr -cert ca.crt -keyfile ca.key -out isrlabs.crt -extensions v3_OCSP
I get:
Using configuration from /usr/ssl/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject’s Distinguished Name is as follows
countryName RINTABLE:’US’
organizationName :ASN.1 12:’U.S. Government’
organizationalUnitName:ASN.1 12:’DoD’
organizationalUnitName:ASN.1 12:’DoDIIS’
commonName :ASN.1 12:’isrlabs’
ERROR: adding extensions in section v3_OCSP
6216:error:2207707B:X509 V3 routines:V2I_AUTHORITY_KEYID:unable to get issuer keyid:v3_akey.c:166:
6216:error:22098080:X509 V3 routines:X509V3_EXT_nconf:error in extension:v3_conf.c:93:name=authorityKeyIdentifier, value=keyid:always,issuer:always
It’s an error in the article, the hostname should be ca.isrlabs.net, or whatever the hostname of your issuing CA.
iptables四表五链
tcp 状态转移图详解
基于状态的iptables
参考文章:
https://blog.csdn.net/dhRainer/article/details/84846417
如果按照tcp/ip来划分连接状态,有11种之多(https://www.cnblogs.com/missmzt/p/5308149.html)
但iptables里只有4种状态;ESTABLISHED、NEW、RELATED及INVALID
这两个分类是两个不相干的定义。例如在TCP/IP标准描述下UDP及ICMP数据包是没有连接状态的,但在state模块的描述下,任何数据包都有连接状态。
1、ESTABLISHED
(1)与TCP数据包的关系:首先在防火墙主机上执行SSH Client,并且对网络上的SSH服务器提出服务请求,而这时送出的第一个数据包就是服务请求的数据包,如果这个数据包能够成功的穿越防火墙,那么接下来SSH Server与SSH Client之间的所有SSH数据包的状态都会是ESTABLISHED。
(2)与UDP数据包的关系:假设我们在防火墙主机上用firefox应用程序来浏览网页(通过域名方式),而浏览网页的动作需要DNS服务器的帮助才能完成,因此firefox会送出一个UDP数据包给DNS Server,以请求名称解析服务,如果这个数据包能够成功的穿越防火墙,那么接下来DNS Server与firefox之间的所有数据包的状态都会是ESTABLISHED。
(3)与ICMP数据包的关系:假设我们在防火墙主机ping指令来检测网络上的其他主机时,ping指令所送出的第一个ICMP数据包如果能够成功的穿越防火墙,那么接下来刚才ping的那个主机与防火墙主机之间的所有ICMP数据包的状态都会是ESTABLISHED。
由以上的解释可知,只要第一个数据包能够成功的穿越防火墙,那么之后的所有数据包(包含反向的所有数据包)状态都会是ESTABLISHED。
2、NEW
首先我们知道,NEW与协议无关,其所指的是每一条连接中的第一个数据包,假如我们使用SSH client连接SSH server时,这条连接中的第一个数据包的状态就是NEW。
3、RELATED
RELATED状态的数据包是指被动产生的数据包。而且这个连接是不属于现在任何连接的。RELATED状态的数据包与协议无关,只要回应回来的数据包是因为本机送出一个数据包导致另一个连接的产生,而这一条新连接上的所有数据包都是属于RELATED状态的数据包。
4、INVALID
INVALID状态是指状态不明的数据包,也就是不属于以上三种状态的封包。凡是属于INVALID状态的数据包都视为恶意的数据包,因此所有INVALID状态的数据包都应丢弃掉,匹配INVALID状态的数据包的方法如下:
iptables -A INPUT -p all -m state INVALID -j DROP
我们应将INVALID状态的数据包放在第一条。
iptables 列出filter表的规则
iptables -L
iptables 列出filter表的规则,并加上行号
iptables -L --line-number
iptables 设置默认的阻止策略
iptables -P INPUT DROP
iptables -P OUTPUT DROP
允许本机对外PING,禁止外部对本机PING
iptables -A INPUT -p icmp -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED -j ACCEPT
删除所有规则
iptables -F
删除INPUT链条中行号为1的规则:
iptables -D INPUT 1
kali 开启apache服务
systemctl start apache2
查看apache的启动状态
systemctl status apache2
修改apache主页内容
vi /var/www/html/index.html
在本机上查看主页
curl http://127.0.0.1
允许外部主机访问本机http服务
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
或者
iptables -A OUTPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
例2:有些服务器,可能希望你ping不通他,但是他可以ping通你
方法一:
在服务器上把/proc/sys/net/ipv4/icmp_echo_ignore_all的值改为1
临时修改:# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
永久修改:
vim /etc/sysctl.conf --加上下面一句
net.ipv4.icmp_echo_ignore_all = 1
sysctl -p --使用此命令让其生效
通过iptables的状态来实现
有下面两台机
10.1.1.9 10.1.1.10
实现10.1.1.10这个IP能ping通所有人.但所有人不能ping通10.1.1.10
|
--------------》| ------->
client | server
10.1.1.9 | 10.1.1.10
<-------------| <--------
NEW ESTABLISHED
INPUT 拒绝 允许
OUTPUT 允许 允许
1,在10.1.1.10上
iptables -P INPUT DROP
iptables -P OUTPUT DROP
这里就把双链都关掉,10.1.1.9任何访问都过不来了
2,在10.1.1.10上
iptables -A INPUT -p icmp -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED -j ACCEPT
---重点是INPUT那条不能允许NEW状态的;
---注意第二步的第二条(也就是output这条),如果只写了NEW状态,那么10.1.1.10ping所有人,都只能通第一个包;加上ESTABLISHED状态,所有包都能通
例3:
有一个服务器,搭建了http,ftp(主动和被动都要支持,被动端口为3000-3005)两个服务(需要开放给所有人访问);还要开放ssh和ping(但只开放给一个管理ip访问,比如此IP为10.1.1.X),其它任何进来的访问都拒绝
但此服务器要出去访问别的任何服务,自己的防火墙都要允许
需求一个一个的写:
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
iptables -A INPUT -p tcp --dport 3000:3005 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 3000:3005 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -s 10.1.1.x -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -d 10.1.1.x -j ACCEPT
iptables -A INPUT -p icmp -s 10.1.1.x -j ACCEPT
iptables -A OUTPUT -p icmp -d 10.1.1.x -j ACCEPT
iptables -A OUTPUT -p all -m state --state new,established,related -j ACCEPT
iptables -A INPUT -p all -m state --state established,related -j ACCEPT
把上面的综合起来:
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -A INPUT -p tcp -m multiport --dport 80,21,3000,3001,3002,3003,3004,3005 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -s 10.1.1.x -j ACCEPT
iptables -A INPUT -p icmp -s 10.1.1.x -j ACCEPT
iptables -A INPUT -p all -m state --state established,related -j ACCEPT
iptables -A OUTPUT -p all -m state --state new,established,related -j ACCEPT
CentOS7 防火墙 Firewalld
https://www.niaoyun.com/docs/16748.html
启动FirewallD服务:
systemctl enable firewalld.service #设置开机启动
systemctl start firewalld.service #开启服务
查看防火墙状态:
systemctl status firewalld
- 区域管理
1.1. 网络区域简介
通过将网络划分成不同的区域,制定出不同区域之间的访问控制策略来控制不同程序区域间传送的数据流。例如,互联网是不可信任的区域,而内部网络是高度信任的区域。网络安全模型可以在安装,初次启动和首次建立网络连接时选择初始化。该模型描述了主机所连接的整个网络环境的可信级别,并定义了新连接的处理方式。有如下几种不同的初始化区域:
阻塞区域(block):任何传入的网络数据包都将被阻止。
工作区域(work):相信网络上的其他计算机,不会损害你的计算机。
家庭区域(home):相信网络上的其他计算机,不会损害你的计算机。
公共区域(public):不相信网络上的任何计算机,只有选择接受传入的网络连接。
隔离区域(DMZ):隔离区域也称为非军事区域,内外网络之间增加的一层网络,起到缓冲作用。对于隔离区域,只有选择接受传入的网络连接。
信任区域(trusted):所有的网络连接都可以接受。
丢弃区域(drop):任何传入的网络连接都被拒绝。
内部区域(internal):信任网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接。
外部区域(external):不相信网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接。
注:FirewallD的默认区域是public。
1.2. 显示支持的区域列表
firewall-cmd --get-zones
1.3. 设置为家庭区域
firewall-cmd --set-default-zone=home
1.4. 查看当前区域
firewall-cmd --get-active-zones
1.5. 设置当前区域的接口
firewall-cmd --get-zone-of-interface=enp03s
1.6. 显示所有公共区域(public)
firewall-cmd --zone=public --list-all
1.7. 临时修改网络接口(enp0s3)为内部区域(internal)
firewall-cmd --zone=internal --change-interface=enp03s
1.8. 永久修改网络接口enp03s为内部区域(internal)
firewall-cmd --permanent --zone=internal --change-interface=enp03s
- 服务管理
2.1. 显示服务列表
Amanda, FTP, Samba和TFTP等最重要的服务已经被FirewallD提供相应的服务,可以使用如下命令查看:
firewall-cmd --get-services
2.2. 允许SSH服务通过
firewall-cmd --enable service=ssh
2.3. 禁止SSH服务通过
firewall-cmd --disable service=ssh
2.4. 打开TCP的8080端口
firewall-cmd --enable ports=8080/tcp
2.5. 临时允许Samba服务通过600秒
firewall-cmd --enable service=samba --timeout=600
2.6. 显示当前服务
firewall-cmd --list-services
2.7. 添加HTTP服务到内部区域(internal)
firewall-cmd --permanent --zone=internal --add-service=http
firewall-cmd --reload #在不改变状态的条件下重新加载防火墙 端口管理
3.1. 打开端口打开443/TCP端口
firewall-cmd --add-port=443/tcp
永久打开3690/TCP端口
firewall-cmd --permanent --add-port=3690/tcp
永久打开端口好像需要reload一下,临时打开好像不用,如果用了reload临时打开的端口就失效了
其它服务也可能是这样的,这个没有测试
firewall-cmd --reload
查看防火墙,添加的端口也可以看到
firewall-cmd --list-all
- 直接模式
FirewallD包括一种直接模式,使用它可以完成一些工作,例如打开TCP协议的9999端口
firewall-cmd --direct -add-rule ipv4 filter INPUT 0 -p tcp --dport 9000 -j ACCEPT
firewall-cmd --reload
5.封禁入站IP:
封禁IP既可以通过--add-rich-rule来使用firewalld的语法,也可以使用 --add-rule来使用iptables的语法,让习惯iptables的运维人员无缝迁移
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.0.11' reject"
firewall-cmd --permanent --zone=testing --add-rich-rule='rule family=ipv4 source address=192.168.0.10/24 reject'
firewall-cmd --permanent --zone=testing --add-rich-rule='rule family=ipv4 source address=10.0.0.0/24 destination address=192.168.0.10/32 port port=8080-8090 protocol=tcp accept'
删除上面建立的某条规则
firewall-cmd --permanent --zone=testing --remove-rich-rule='rule family=ipv4 source address=10.0.0.0/24 destination address=192.168.0.10/32 port port=8080-8090 protocol=tcp accept'
允许某个IP连接本地某接口
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.31.100" port protocol="tcp" port="8080" accept"
查看上面建立的规则
firewall-cmd --permanent --list-all --zone=test
允许某个IP或地址段连接本机任意端口
firewall-cmd --permanent --zone=test --remove-rich-rule='rule family="ipv4" source address="192.168.1.1" accept'
firewall-cmd --permanent --zone=test --remove-rich-rule='rule family="ipv4" source address="192.168.1.0/24" accept'
6.限制出站流量:
(通过主动请求到服务器的反向流量不受影响),下面介绍使用--add-rule命令,模仿iptables的语法
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -m state --state ESTABLISHED,RELATED -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -p tcp -m tcp --dport 80 -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -d 192.168.1.1 -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 2 -j DROP
firewall-cmd --permanent --direct --get-all-rules
网络后门程序
后门程序的特点及经典案例介绍
https://product.pconline.com.cn/itbk/software/dnyw/1707/9626667.html
后门程序--百度百科
https://baike.baidu.com/item/%E5%90%8E%E9%97%A8%E7%A8%8B%E5%BA%8F/108154?fr=aladdin
Linux服务器被rootkit恶意软件攻击后的处理方法
https://www.jb51.net/LINUXjishu/260071.html
rootkit后门检测工具
https://www.cnblogs.com/zhaijiahui/p/10622425.html
详解简单的反黑客远程控制的方法(后门程序)
https://www.jb51.net/hack/488479.html