系统安全SSH入侵检测及相应 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

系统安全SSH入侵检测及相应

申博_安全防护 申博 273次浏览 已收录 0个评论

一、媒介

作为系列文章的第一篇https://www.freebuf.com/es/193557.html 引见了攻防体系的全部状况和搭建要领,依照这篇文章应当是可以或许把全部状况搭建终了的.。在这篇文章中还引见到了课程纲要包罗主机平安、web平安、后门/木马等等,下面就让我们最先我们的试验课程。

二、课程目的

起首第一个课程是主机平安的ssh端口入侵&检测&相应课程。

课程有几个目的以下所示:

1. 闇练运用nmap类端口扫描对象

2. 闇练运用hydra、msf等平台对ssh效劳展开爆破行动

3. 监测平台可以或许在第一时刻检测到进击行动并发出告警

4. 可以或许在效劳器上找到入侵陈迹包孕进击时刻、进击体式格局、是不是胜利、进击源等有价值信息

注:关于许多大佬来讲这些都是小菜了,然则在一最先的时刻我也是这么以为的(我不是大佬)直到在做背面环节的时刻照样遇到了一些题目,同时也掌握了一些新的学问,置信人人都邑在这个历程傍边都可以或许有所收成。

三、试验状况

进击主机ip:192.168.171.130(注:由于换了新电脑,物理主机没有进击状况,以是新装了一个kali虚拟机作为进击主机)

受益者主机ip:192.168.171.121

检测主机ip:192.168.171.120

四、进击思绪

1. 运用nmap等端口扫描对象探测目的效劳器是不是存在ssh效劳

1)在进击主机的敕令行下输入nmap -sS 192.168.171.121 对目的主机举行端口扫描:

系统安全SSH入侵检测及相应

2)检测发明目的主机存在ssh效劳,实验上岸频频推断是不是存在上岸次数限定或上岸地点限定状况:

系统安全SSH入侵检测及相应

经由屡次实验上岸发明没有存在限定次数上岸和限定登录地点的状况,以是我们可以或许运用爆破对象加载字典对ssh效劳举行爆破了。

2. 运用msf、hydra等对象加载字典对目的ssh效劳展开爆破行动,这里运用hydra来做演示。

hydra和msf的运用要领不做过量引见,不然篇幅没法掌握。人人若是有不懂的,可以或许百度或许联络我。

1)在敕令行下运用hydra加载用户名、暗码字典对目的ssh效劳展开爆破行动:

hydra -L user.txt -P pass.txt ssh://192.168.171.121

2)对爆破出来的用户名暗码实验上岸

系统安全SSH入侵检测及相应ssh victim@192.168.171.121  输入暗码后一般上岸:

系统安全SSH入侵检测及相应

3)建立SSH免密上岸

3.1)如今进击主机上天生公钥信息

ssh-keygen -t rsa

系统安全SSH入侵检测及相应3.2)将天生的公钥信息传到受益主机上

系统安全SSH入侵检测及相应

肯定要注重是公钥文件后缀为.pub。

ssh-copy-id -i .ssh/id_rsa.pub victim@192.168.171.121

系统安全SSH入侵检测及相应

输入受益主机的暗码后便可。

3.3)实验可以或许免密上岸

ssh victim@192.168.171.121  直接上岸不消输入暗码。

系统安全SSH入侵检测及相应

一般状况下是需要输入暗码的,注重标红地位:

系统安全SSH入侵检测及相应

至此基础的SSH进击已完毕了,思绪很简单这个应当是基础功无压力。下面的历程就对照有收成了。

五、相应要领

1. 上岸目的主机封闭ssh效劳、检察被爆破胜利账户、推断是不是存在ssh免密上岸。

1)封闭ssh效劳

systemctl stop sshd 或许/etc/init.d/sshd stop

2)检察被爆破胜利的账户

两种计划可以或许检察到

2.1)第一种是检察ssh日记中的症结字眼 Accepted password for 

注重Accepted的第一个字母大写不然婚配不到纪录:

cat /var/log/secure | grep "Accepted password for"

系统安全SSH入侵检测及相应

从日记中可以或许发明victim和root账户均被爆破出来。

2.2)第二种是last敕令检察上岸地点信息

系统安全SSH入侵检测及相应last 敕令效果等同于 who /var/log/wtmp。

系统安全SSH入侵检测及相应

3)搜检是不是存在免密上岸

由于从日记和wtmp纪录中我们看到进击者已上岸了victim和root账户以是我们需要在这两个账户下面离别检察是不是存在ssh公钥信息。

3.1)起首检察一般账户victim的.ssh目次下是不是存在authorized_keys文件

ls -l /home/victim/.ssh/

系统安全SSH入侵检测及相应

从上面可以或许看出victim账户存在免密上岸并且还纪录到了进击者效劳器的主机名和用户名信息。

3.2)然后检察root账户的.ssh目次是不是存在authorized_keys文件

ls -l /root/.ssh/

系统安全SSH入侵检测及相应

从效果可以或许看到root账户下不存在免密上岸。

2. 搜检体系用户是不是存在非常账号若存在消灭非常账户

cat /etc/passwd

系统安全SSH入侵检测及相应

无非常账户

3. 搜检ssh日记是不是存在短时刻内大批的实验上岸行动,从而推断这个登录胜利的账户是一般上岸照样非常上岸

检察secure日记文件推断是不是存在大批的Invalid user 字眼

cat /var/log/secure | grep "Invalid user"

系统安全SSH入侵检测及相应cat /var/log/secure | grep “Accepted password for victim from 192.168.171.130″ 纪录上岸胜利的时刻点然后推断是不是跟暴力破解的时刻段一致,若是一致则透露表现该账户是被爆破胜利上岸。或许直接找管理员确认上岸信息是不是一般。

系统安全SSH入侵检测及相应

跟上面的secure日记中的时刻点做婚配可以或许看到该账户是被暴力破解出来的。

4,搜检准时义务是不是存在非常状况

1)crontab -l检察以后用户的准时义务信息

系统安全SSH入侵检测及相应2)sudo crontab -u root -l 检察root账户的准时义务信息

系统安全SSH入侵检测及相应3)检察/etc/cron.d/文件夹中是不是存在文件

系统安全SSH入侵检测及相应

可以或许看到cron.d文件夹中存在准时义务然则内容不含进击行动。

4)检察/etc/cron.daily/    /etc/cron.weekly/    /etc/cron.hourly/   /etc/cron.monthly/ 这些文件夹下面是不是存在准时义务

系统安全SSH入侵检测及相应

六、修复计划

1. 修正被爆破账户暗码增添暗码复杂度

离别实行passwd victim 和passwd root敕令修正victim和root账户暗码。

2. 消灭免密上岸信息

删除.ssh/目次下的authorized_keys文件。

rm -rf .ssh/authorized_keys


3,消灭准时义务

若是存在准时义务直接删除准时义务文件或许进入到准时义务文件中删除所在行信息便可。

4,增添ssh上岸失利次数限定

编纂sshd_config设置装备摆设文件修正MaxAuthTries纪录。

系统安全SSH入侵检测及相应

生存退出后重启sshd效劳。

再次实验上岸且输入暗码凌驾2次后会涌现以下信息。

系统安全SSH入侵检测及相应再次运用hydra实验爆破ssh用户名暗码。

检察secure日记:

系统安全SSH入侵检测及相应

为何呢?为何会涌现这类状况呢?

我们已在SSH的设置装备摆设文件中增添次数限定了为何照样可以或许爆破胜利呢?

是由于我们在这里对上岸失利次数做限定了,然则没有锁定账户。也就是说这个账户依旧可以或许被暴力破解只是破解的速率会慢一点罢了。

那准确的体式格局应当怎样做呢。

需要经由过程pam来锁定凌驾上岸次数的账户编纂/etc/pam.d/sshd文件:

vim /etc/pam.d/sshd

系统安全SSH入侵检测及相应增添如上所示一条纪录该条纪录,透露表现上岸失利凌驾三次后就锁定300秒,root账户若是三次实验后也不可将被锁定1200秒。

字段诠释:

deny透露表现的是设置的最大失利次数

unlock_time 透露表现的是锁定多长时刻单元是秒

deny_root 透露表现root账户也封闭

root_unlock_time 透露表现的是root账户的锁准时刻

注:

若是限定ssh上岸则编纂sshd文件

若是限定终端上岸则编纂login文件

再次实验hydra爆破

系统安全SSH入侵检测及相应发明没法胜利爆破检察secure日记:

系统安全SSH入侵检测及相应日记中显现victim账户已被锁定。

检察锁定的账户和上岸失利的次数:

sudo pam_tally2 --user victim

系统安全SSH入侵检测及相应这时刻实验输入准确暗码实验上岸:

系统安全SSH入侵检测及相应

依旧没法上岸。那怎样消除封闭呢?

只需要将pam中的纪录消灭掉便可。

sudo pam_tally2 --user victim --reset

系统安全SSH入侵检测及相应再次实验上岸victim账户:

系统安全SSH入侵检测及相应

可以或许发明可以或许一般上岸了

5. 限定只许可特定ip地点接见ssh

经由过程编纂/etc/hosts.allow和/etc/hosts.deny这两个文件来掌握接见源ip地点局限。当两个文件同时存在战略的时刻allow文件的优先级大于deny文件。

这里我们限定victim主机只许可171.1接见其他全阻断。

1)vim /etc/hosts.allow 增添以下纪录

sshd:192.168.171.1:allow

2)vim /etc/hosts.deny 增添以下纪录sshd:ALL

然后测试从171.130 ssh接见171.121主机以下所示可以或许看到经由过程171.130没法上岸。

系统安全SSH入侵检测及相应检察171.1主机依然处于上岸状况。

系统安全SSH入侵检测及相应

6. 限定只许可特定用户接见ssh

经由过程编纂sshd设置装备摆设文件增添AllowUsers和DenyUsers设置装备摆设选项来掌握许可上岸的用户。

sudo vim /etc/ssh/sshd_config在文件中追加以下设置装备摆设,若是纪录存在直接修正纪录便可,若是纪录不存在需要在文件末端追加。

AllowUsers      victim

DenyUsers       root

设置装备摆设终了后重启sshd效劳然后离别实验以vicitm和root账户上岸victim主机。

系统安全SSH入侵检测及相应

可以或许看到victim账户可以或许直接上岸root账户则没法直接上岸。

如许我们可以或许经由过程掌握ip和账户信息来完成圆满掌握限定只许可从某台主机运用某个账户上岸。

然则如许有点贫苦需要编纂hosts.allow、hosts.deny和sshd_config文件,实在我们可以或许直接编纂sshd_config文件增添以下纪录:

AllowUsers      victim@192.168.171.1

如许我们就可以或许限定只许可171.1经由过程victim账户上岸victim主机了。

我们在其他主机实验用victim账户上岸以下图所示可以或许看到没法上岸。

系统安全SSH入侵检测及相应

7. 修正对外供应ssh效劳的端口号

1)编纂sshd_config文件增添以下设置装备摆设

port 22

port 3389

增添别的一个ssh端口号3389制止修正失利衔接不上主机了

2)向防火墙增加修正的端口号

sudo firewall-cmd --zone=public --add-port=3389/tcp --permanent

重载防火墙

sudo firewall-cmd --reload

检察端口号是不是增加胜利

sudo firewall-cmd --zone=public --query-port=3389/tcp

系统安全SSH入侵检测及相应提醒yes透露表现胜利增加

3)向selinux中增加修正的端口号

3.1)起首要装置selinux的管理对象semanage

sudo yum provides semanage

sudo yum install policycoreutils-python  #装置依靠包

3.2)装置完成后可以或许运用semanage敕令检察ssh效劳端口

sudo semanage port -l | grep ssh

系统安全SSH入侵检测及相应

向selinux增加ssh端口

sudo semanage port -a -t ssh_port_t -p tcp 3389

考证ssh端口是不是增加胜利

sudo semanage port -l | grep ssh

系统安全SSH入侵检测及相应

增加后重启ssh效劳

systemctl restart sshd

重启后我们可以或许实验用3389上岸

系统安全SSH入侵检测及相应

输入暗码后胜利上岸。

4)删除22端口号

4.1)编纂sshd_config文件解释掉22端口

4.2)firewall_cmd删除22端口

firewall-cmd --zone=public --remove-port=22/tcp --permanent

重载防火墙

sudo firewall-cmd --reload

4.3)selinux不消删除22端口或许说你也删除不了,然则不影响我们的需求

系统安全SSH入侵检测及相应4.4)重启sshd效劳然后实验用22端口衔接victim主机发明是没法衔接的运用3389端口是可以或许的

系统安全SSH入侵检测及相应

战略一般见效

到此加固事情已完成。

七、检测要领

检测需求以下:

1. 可以或许检测到实验上岸行动

2. 可以或许检测到上岸胜利行动

3. 可以或许检测到上岸胜利账户

4. 网络用户字典

5. 纪录登录失利的用户名/次数、登录失利用户准确的次数、登录胜利的用户名/次数、上岸胜利的进击源IP地点/实验次数、登录失利的进击源IP地点/实验次数(本身可以或许排列更细致需求)

检测要领:

我们从secure日记文件剖析来展开检测事情,经由过程对secure日记文件举行剖析我们提取以下症结信息。

ssh效劳的默许日记纪录在/var/log/secure文件中,关于ssh效劳的日记存在五种状况。注重标黑和标红的字眼。

1. 用户名毛病用户名毛病的日记以下所示:

Jan 14 07:37:41 victim sshd[54715]: Invalid user victim1 from 192.168.171.130 port 48550

Jan 14 07:37:41 victim sshd[54715]: input_userauth_request: invalid user victim1 [preauth]

在毛病用户的基础上输入暗码会涌现以下日记

Jan 14 07:37:59 victim sshd[54715]: pam_unix(sshd:auth): check pass; user unknown

Jan 14 07:37:59 victim sshd[54715]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.171.130

Jan 14 07:38:01 victim sshd[54715]: Failed password for invalid user victim1 from 192.168.171.130 port 48550 ssh2

2. 用户名准确但输入毛病暗码的日记以下所示:

Jan 14 07:37:08 victim unix_chkpwd[54691]: password check failed for user (victim)

Jan 14 07:37:08 victim sshd[54689]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.171.130  user=victim

Jan 14 07:37:10 victim sshd[54689]: Failed password for victim from 192.168.171.130 port 48548 ssh2

3. 用户名准确且输入准确暗码的日记以下所示:

Jan 14 07:37:30 victim sshd[54689]: Accepted password for victim from 192.168.171.130 port 48548 ssh2

Jan 14 07:37:30 victim sshd[54689]: pam_unix(sshd:session): session opened for user victim by (uid=0)

4. 客户端主动退出ssh衔接的日记以下所示

Jan 14 07:37:38 victim sshd[54694]: Received disconnect from 192.168.171.130 port 48548:11: disconnected by user

Jan 14 07:37:38 victim sshd[54694]: Disconnected from 192.168.171.130 port 48548

Jan 14 07:37:38 victim sshd[54689]: pam_unix(sshd:session): session closed for user victim

5. 客户端强迫封闭ssh衔接的日记以下所示

Jan 14 07:42:25 victim sshd[54718]: Connection closed by 192.168.171.130 port 48552 [preauth]

由上所述,我们需要做的检测战略以下:

1. 可以或许检测到实验上岸行动

1)这里我们设定10秒钟内发明5条存在 invalid user 或许password check failed语句的纪录则透露表现存在实验上岸行动(规则可自界说:包孕时刻和纪录数)

2. 可以或许检测到上岸胜利行动

1)对所有带有“accept password for”语句的日记发明的记录进行剖析

3.可能会检测到胜利帐号的登陆

1)提取日记中“match”句后面的字段为“accept password for”

4. Web用户词典

1)提取日志中无效用户语句后面的字段

5. 记录登录失败的用户名/次数,准确的登录用户数,成功登录的用户名/次数,成功登陆攻击源IP位置/实验次数,失败登录攻击源IP位置/实验次数

1)通过各种计算点得到上述统计信息

看看下面的脚本:

#!/usr/bin/python

#coding:utf-8

from collections import Counter

#界说症结词信息

username_error='Invalid user'

username_correct='password check failed'

username_password_correct='Accepted password for'

user_quit='Received disconnect from'

user_forcequit='Connection closed'

#翻开日记文件

f=open('secure','r')

#界说检测要领

def attack_detect():

    #用户名毛病的要求次数

    failed_account=0

-------------------------------------

申博网络安全巴士站

申博-网络安全巴士站是一个专注于网络安全、系统安全、互联网安全、信息安全,全新视界的互联网安全新媒体。

-------------------------------------

    #用户名准确且暗码毛病的要求次数

    correct_user_account=0

    #用户名准确且暗码准确的要求次数

    correct_pass_account=0

    #纪录毛病的用户名

    failed_user=[]

    #纪录用户名准确且暗码毛病的用户名

    correct_user=[]

    #纪录用户名准确且暗码准确的用户名

    correct_pass=[]

    #纪录登录失利的ip地点

    failed_ipaddr=[]

    #纪录登录失利&用户名准确的ip地点

    correct_ipaddr=[]

    #纪录登录胜利的ip地点

    correct_pass_ipaddr=[]

    #标记位

    alert=True

    for i in f:

        if username_error in i:

            failed_account += 1

            failed_user.append(i.split(': ')[1].split()[2])

            failed_ipaddr.append(i.split(': ')[1].split()[4])

        if username_correct in i:

            correct_user_account += 1

            correct_user.append(i.split(': ')[1].split('(')[1].strip(')'))

        if username_password_correct in i:

            correct_pass_account += 1

            correct_pass.append(i.split(': ')[1].split()[3])

            correct_pass_ipaddr.append(i.split(': ')[1].split()[5])

        if failed_account > 30 and alert:

            print 'exists ssh enumrate'

            alert=False 

    #纪录上岸失利进击源IP地点和实验次数

    failed_ipaddr_count=Counter(failed_ipaddr)

    failed_ipaddr_dict=dict(failed_ipaddr_count)

    #纪录上岸胜利进击源IP地点和实验次数

    correct_pass_ipaddr_count=Counter(correct_pass_ipaddr)

    correct_pass_ipaddr_dict=dict(correct_pass_ipaddr_count)

    #纪录上岸失利用户名和次数

    failed_user_count=Counter(failed_user)

    failed_user_dict=dict(failed_user_count)

    #纪录上岸失利用户名准确和次数

    correct_user_count=Counter(correct_user)

    correct_user_dict=dict(correct_user_count)

    #纪录上岸胜利用户名和次数

    correct_pass_count=Counter(correct_pass)

    correct_pass_dict=dict(correct_pass_count)

    #纪录一切实验次数

    all_account=failed_account+correct_user_account+correct_pass_account

    return all_account,failed_account,correct_user_account,correct_pass_account,failed_user_dict,correct_user_dict,correct_pass_dict,failed_ipaddr_dict,correct_pass_ipaddr_dict

然后实行该剧本可以或许得出以下效果:

系统安全SSH入侵检测及相应从效果中可以或许看出该剧本可以或许知足我们的需求,然则我们需要斟酌怎样把这段剧本加入到spark streaming中。

八、手艺完成

1. victim主机上的flume设置装备摆设

系统安全SSH入侵检测及相应注重:这里在设置装备摆设channels选项的时刻,增添了下面两个条目:

a1.channels.c1.keep-alive = 60

a1.channels.c1.capacity = 1000000

这里透露表现增添channels中queue的巨细,默以为100,若是运用默许值,当处置惩罚大批的日记时就会发作以下报错状况。

系统安全SSH入侵检测及相应

2. observer主机上的flume设置装备摆设

系统安全SSH入侵检测及相应3. observer上的kafka、zookeeper设置装备摆设

kafka和zookeeper的设置装备摆设连结稳定便可

4. spark streaming设置装备摆设

#!/usr/bin/python

#coding:utf-8

from pyspark import SparkContext

from pyspark.streaming import StreamingContext

from pyspark.streaming.kafka import KafkaUtils

from collections import Counter

import datetime

import json

#界说生存的文件名

destname="result.json"

#界说读取文件要领

def readjson(file_name):

    with open (file_name,"r") as file_obj:

        numbers = json.load(file_obj)

        print "读取json文件:",numbers

        return numbers

#界说写入文件要领

def writejson(file_name,nums):

    with open (file_name,"w") as file_obj:

        json.dump(nums,file_obj)

        print "写入json文件:",nums

#第一步:建立一个当地的StreamingContext,并设置批处置惩罚周期为1s

sc=SparkContext("local[2]","flumeWordCount")

ssc=StreamingContext(sc,1)

#第二步:建立一个kafka衔接

topic="streamingtopic"

brokers="hadoop0:9092"

#参数离别透露表现ssc衔接名,列表情势显现的topic称号,brokers列表

directkafkaStream = KafkaUtils.createDirectStream(ssc,[topic],{"metadata.broker.list":brokers})

#第三步:数据处置惩罚&转换

#0,提取kafka数据的第一个字段为音讯正文字段

lines = directkafkaStream.map(lambda x: x[1])

#1,界说检测要领

def attack_detect(i):

    username_error='Invalid user'

    username_correct='password check failed'

    username_password_correct='Accepted password for'

    user_quit='Received disconnect from'

    user_forcequit='Connection closed'

    failed_account=0

    correct_user_account=0

    correct_pass_account=0

    failed_user=[]

    correct_user=[]

    correct_pass=[]

    failed_ipaddr=[]

    correct_ipaddr=[]

    correct_pass_ipaddr=[]

    alert=True    

    if username_error in i:

        print username_error

        failed_account += 1

        failed_user.append(i.split(': ')[1].split()[2])

        failed_ipaddr.append(i.split(': ')[1].split()[4])

        #print failed_account

    if username_correct in i:

        #print username_correct

        correct_user_account += 1

        correct_user.append(i.split(': ')[1].split('(')[1].strip(')').strip(')\n'))

    if username_password_correct in i:

        #print username_password_correct

        correct_pass_account += 1

        correct_pass.append(i.split(': ')[1].split()[3])

        correct_pass_ipaddr.append(i.split(': ')[1].split()[5])

    if failed_account > 5 and alert:

        #print 'exists ssh enumrate'

        alert=False

    total_count=failed_account+correct_user_account+correct_pass_account

    #纪录上岸失利进击源IP地点和实验次数

    failed_ipaddr_count=Counter(failed_ipaddr)

    failed_ipaddr_dict=dict(failed_ipaddr_count)

    #纪录上岸胜利进击源IP地点和实验次数

    correct_pass_ipaddr_count=Counter(correct_pass_ipaddr)

    correct_pass_ipaddr_dict=dict(correct_pass_ipaddr_count)

    #纪录上岸失利用户名和次数

    failed_user_count=Counter(failed_user)

    failed_user_dict=dict(failed_user_count)

    #纪录上岸失利用户名准确和次数

    correct_user_count=Counter(correct_user)

    correct_user_dict=dict(correct_user_count)

    #纪录上岸胜利用户名和次数

    correct_pass_count=Counter(correct_pass)

    correct_pass_dict=dict(correct_pass_count)

    #这里将处置惩罚的数据以字典的情势生存到json文件中,每次从json文件中读取变量值并跟处置惩罚的效果举行累加

    nums=[{"total_count":total_count,"failed_account":failed_account,"correct_user_account":correct_user_account,"correct_pass_account":correct_pass_account,"failed_ipaddr_count":failed_ipaddr_count,"failed_ipaddr_dict":failed_ipaddr_dict,"correct_pass_ipadd_count":correct_pass_ipaddr_count,"correct_pass_dict":correct_pass_dict,"correct_pass_ipaddr_dict":correct_pass_ipaddr_dict,"failed_user_count":failed_user_count,"failed_user_dict":failed_user_dict,"correct_user_count":correct_user_count,"correct_user_dict":correct_user_dict}]

    rs_old = readjson(destname)

    for i in nums:

        for j in rs_old:

            for k,v in j.items():

                if isinstance(v,dict):

                    for m,n in v.items():

                        try:

                            i[k][m] = i[k][m] + j[k][m]

                        except KeyError as e:

                            i[k][m] = j[k][m]

                else:

                    i[k] = i[k] + j[k]

    writejson(destname,nums)

#第四步:数据输出,这里挑选打印进来

pairs=lines.map(lambda x:attack_detect(x))

pairs.pprint()

#第五步:最先sparkstreaming

ssc.start()

ssc.awaitTermination()

5. 启动各个组件

1)先启动zookeeper和kafka

 ./zkServer.sh start

./bin/kafka-server-start.sh $KAFKA_HOME/config/server.properties

2)然后启动flume-server端(先监听,后发送)

./bin/flume-ng agent --name a1 --conf $FLUME_HOME/conf --conf-file $FLUME_HOME/conf/collect-ssh-kafka.conf -Dflume.root.logger=INFO,console

3)启动flume-client端(监听文件,发送数据到server端)

sudo ./flume-ng agent --name a1 --conf $FLUME_HOME/conf --conf-file $FLUME_HOME/conf/send-ssh.conf -Dflume.root.logger=INFO,console

4)启动spark-streaming

./bin/spark-submit --packages org.apache.spark:spark-streaming-kafka-0-8_2.11:2.2.0 examples/src/main/python/streaming/sshdirect.py

6. 模仿进击者向victim提议ssh爆破行动

hydra -L user -P pass ssh://192.168.171.121:3389

系统安全SSH入侵检测及相应然后我们检察result.json文件中的内容赓续及时更新,进击完成后的终究效果以下:

系统安全SSH入侵检测及相应

由上所述我们可以或许看到文件纪录了ssh总进击次数、用户名毛病实验次数、用户名准确上岸次数和上岸源ip地点等信息。

注:

1. 这里我运用的是以文件情势举行存储的,没有运用mysql数据库,理论上要领是一样的,这里我就不演示了,有兴致的小伙伴可以或许本身搞

2. 这里的result.json文件内容是流动的,必需要跟spark streaming剧本中的变量花样一致,不然可能会涌现题目,背面附录中我会把花样文件贴上来

九、图形页面展现

这里我就以一个例子来展现吧,以条形图的情势展现上岸失利的用户状况。

1,django状况装置

注:已装置django状况的自动疏忽

1)运用virtualenv状况

virtualenv -p /usr/bin/python3 myechart

source myechart/bin/activate

pip install django==1.11.4

pip install pyecharts

2)新建django项目和app顺序

django-admin startproject myechart

cd sshechart

python manage.py startapp  sshechart

编纂myechart/settings.py文件,注册应用顺序:

系统安全SSH入侵检测及相应编纂sshechart的urls文件,该文件默许不存在,需要建立。内容以下:

from django.conf.urls import url

from . import views

urlpatterns = [

    url(r'^$', views.index, name='index'),

]

编纂myechart的urls文件,更新内容以下:

系统安全SSH入侵检测及相应2. 数据处置惩罚

1)编纂views.py文件内容以下:

from __future__ import unicode_literals

import math

from django.http import HttpResponse

from django.template import loader

from pyecharts import Line

from django.shortcuts import render

import json

# Create your views here.

#加载echart.js文件

REMOTE_HOST = "https://pyecharts.github.io/assets/js"

def index(request):

    #指定模板文件

    template = loader.get_template('sshechart/index.html')

    attack_line=line1()

    context = dict(

        myechart=attack_line.render_embed(),

        host=REMOTE_HOST,

        script_list=attack_line.get_js_dependencies()

    )

    return HttpResponse(template.render(context, request))

def line1():

    #Line图需要指定x轴和y轴数据

    x_raw=[]

    y_raw=[]

    with open('result.json') as f:

        numbers = json.load(f)

        for i in numbers:

            dic=i["failed_user_dict"]

            print (dic)

            for k,v in dic.items():

                x_raw.append(k)

                y_raw.append(v)

    line_attack=Line("上岸失利用户",title_pos="45%")

    line_attack.add("",x_raw,y_raw,mark_point=["max","min"],is_datazoom_show=True,datazoom_type="inside")

    return line_attack

2)建立模板index.html文件

在sshechart目次下建立templates/sshechart目次。

系统安全SSH入侵检测及相应

并编纂index.html文件,内容以下:

<!DOCTYPE html>

<html>

<head>

    <meta charset="utf-8">

    <title>Proudly presented by PycCharts</title>

    {% for jsfile_name in script_list %}

        <script src="{{ host }}/{{ jsfile_name }}.js"></script>

    {% endfor %}

</head>

<body>

  {{ myechart|safe }}

</body>

</html>

3. 运转顺序

运转顺序后,在浏览器中翻开目的网站,以下所示:

系统安全SSH入侵检测及相应一样的,还可以或许多增添加一些echart图表来添加配置文件维度。

还可以复制这个内部源代码并将其集成到其他web序列中。

此时,这个话题就结束了,这段时间也遇到了各种各样的话题,耽误了很多时间,幸运的是,终于解决了,大家可能希望在这里可以有所收获,也可能希望大家可以指出文章的不足之处,加以鼓励吧。

附录:

1. result.json文件花样

[{"failed_account": 0, "correct_user_dict": {}, "correct_pass_ipaddr_count": {}, "correct_pass_account": 0, "failed_ipaddr_dict": {}, "failed_user_dict": {}, "correct_pass_ipaddr_dict": {}, "correct_pass_dict":{},"total_count": 0, "correct_pass_ipadd_count": {}, "correct_user_count": {}, "correct_user_account": 0, "failed_user_count": {}, "failed_ipaddr_count": {}}]


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明系统安全SSH入侵检测及相应
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址