一 前言:
正所谓善守者不知其所攻,善攻者不知其所守。网络攻防本来就是一场看不见硝烟的对抗。
本人设计的这套端口蜜罐检测程序,是在总结了大量的APT攻击方法和思路之后,结合自己分析和思考,针对当前企业面临的大量黑客攻击,而无法得到有效的预警信息,设计了这个简易版本的蜜罐程序。
二 设计方法和思路
下面结合APT攻击的常见流程来分析端口蜜罐程序设计的方法和思路。
上面这张图片只是列出了常见的三种攻击流程,APT攻击的方法和思路还有很多,如2010年的震网病毒, 近两年被发现的往流行的网络管理客户端xshell,putty,secureCRT等植入后门再从中筛选攻击目标 等等。
在上面的三种APT攻击方法中,第一种方法是最普遍,被黑客使用最多的一种。那我们就针对第一种方法设计相关的防御措施。在网络入侵者使用第一种方法实施入侵时,会用nmap等端口扫描工具扫描子域名开放的端口信息。比如常见的21(ftp), 22(ssh),1433(mssql),3306(mysql),3389(rdp) 等端口。在端口扫描之后黑客会用暴力破解工具进行在线破解,破解失败后会检测常见的web漏洞,比如sql注入,xss,文件上传漏洞等等。
既然端口扫描和在线破解会被黑客广泛使用,那我们就可以开放常见的端口让黑客主动发起网络连接。当黑客用端口 扫描工具和暴力破解工具扫描JIDS监听的端口时,程序会记录黑客 的公网IP地址,扫描的日期时间,扫描的次数等信息, 同时当扫描的次数超过指定的次数时,会发出告警邮件。
三 代码实现部分
public static void fl_bind(int fl_port)
{
ServerSocket serverSocket=null;
try
{
serverSocket=new ServerSocket(fl_port);
Socket socket=null;
System.out.println("监听: " + fl_port + " 成功.");
int count=1;
int value=15;
List iplist = new ArrayList();
while(true)
{
socket=serverSocket.accept();
fl_serverThread serverThread=new fl_serverThread(fl_port,socket);
serverThread.start();
InetAddress address=socket.getInetAddress();
String ipaddr=address.getHostAddress();
iplist.add(ipaddr);
count++;
if(count > value)
{
fl_ip_report(iplist,fl_port,value);
value+=300; //每增加三百次执行一次。
}
}
}catch (IOException e) {
System.out.println(fl_port + " in use");
}catch (Exception e) {
System.out.println(e.getMessage());
}
finally
{
try
{
if(serverSocket!=null)
serverSocket.close();
} catch (IOException e) {
}
}
}
上面只是整个程序代码中的核心代码部分。说说代码的实现逻辑;当黑客用nmap扫描端口和使用hydra,ncrack 等若口令在线破解工具时,会发起TCP网络连接请求,只要TCP连接发送过来,这边监听的常见端口如21,22,3306 等就会做相应的响应,把黑客的公网IP 地址,扫描的日期时间记录下来,记录完成之后就会立即断开,并且每个监听的端口放在单独的一个线程中,互不干扰。