NAS的其他安全软件


该系列文章的标题为“ 构建安全NAS” 。 因此,本文将考虑提高安全级别。 此外,还将介绍那些我没有使用过但可以应用的工具。


谁和如何?


谁来攻击系统,他将如何做?


这通常是谈论安全性之前需要回答的第一个问题。
至少在NAS的情况下,这样的答案已经是隐含的。 但是为了完全回答这个问题,正在构建威胁模型和入侵者模型。


公司正在其开发周期中进入威胁建模阶段。
微软为此提供了一个SDL ,人们拥有了其他模型


它们暗示使用某些技术,例如STRIDEDREAD (STRIDE仍然更通用,并且在仪器上得到很好的支持)。


例如,在STRIDE中,模型是建立在数据流上的,并且通常庞大,繁重且理解不清。 但是,该工具提供了潜在威胁的列表,这有助于对其进行考虑。


威胁模型是分类信息,因为它可以使攻击者更轻松地分析系统并发现漏洞。 如果他收到模型,他将不必自己建立模型,因为分析师已经做好了一切准备。


这是一分钟的广告。



这就是认真的公司建立模型的方式。 如果这很有趣,我可以在另一篇文章中进行描述。


在这里,我将用英语描述所谓的“强化” ,并处理系统构建过程中出现的安全漏洞。


基本上,通过关闭已知的系统漏洞,对其进行监视并定期对其进行检查,可以将安全级别维持在此级别。


相关文献


阅读内容:



快照和Docker


以前,已安装zfs-autosnapshot。 他反复帮助我,因为 我可以从快照还原损坏的配置(例如,用于Nextcloud)。
但是,随着时间的流逝,系统开始变慢,成千上万的快照成倍增加。


com.sun:auto-snapshot=false ,在为容器创建父文件系统时,我忘记设置标志com.sun:auto-snapshot=false


原始文章中,此问题已得到解决,在这里,我将展示如何消除多余的快照。


有关如何更正错误的详细信息。

首先,在Docker的父文件系统上关闭zfs-auto-snapshot:


 zfs set com.sun:auto-snapshot=false tank0/docker/lib 

现在删除未使用的容器和图像:


 docker container prune docker image prune 

删除快照:


 zfs list -t snapshot -o name -S creation | grep -e ".*docker/lib.*@zfs-auto-snap" | tail -n +1500 | xargs -n 1 zfs destroy -vr 

并在所有图像文件系统上将其关闭:


 zfs list -t filesystem -o name -S creation | grep -e "tank0/docker/lib" | xargs -n 1 zfs set com.sun:auto-snapshot=false 

更多细节可以在这里阅读。


LDAP


上一次,仅创建了一个具有管理员角色的LDAP用户。


但是大多数服务不需要更改用户数据库中的任何内容。 因此,最好添加一个只读用户。 为了不手动创建角色,可以使用容器初始化脚本。


首先,在docker-compose.yml添加设置以启用只读用户:


 - "LDAP_READONLY_USER=true" - "LDAP_READONLY_USER_USERNAME=readonly" - "LDAP_READONLY_USER_PASSWORD=READONLY_PASSWORD" 

扰流板下的完整文件。


docker-compose.yml
 version: "2" networks: ldap: docker0: external: name: docker0 services: open-ldap: image: "osixia/openldap" hostname: "open-ldap" restart: always environment: - "LDAP_ORGANISATION=NAS" - "LDAP_DOMAIN=nas.nas" - "LDAP_ADMIN_PASSWORD=ADMIN_PASSWORD" - "LDAP_CONFIG_PASSWORD=CONFIG_PASSWORD" - "LDAP_READONLY_USER=true" - "LDAP_READONLY_USER_USERNAME=readonly" - "LDAP_READONLY_USER_PASSWORD=READONLY_PASSWORD" - "LDAP_TLS=true" - "LDAP_TLS_ENFORCE=false" - "LDAP_TLS_CRT_FILENAME=ldap_server.crt" - "LDAP_TLS_KEY_FILENAME=ldap_server.key" - "LDAP_TLS_CA_CRT_FILENAME=ldap_server.crt" volumes: - ./certs:/container/service/slapd/assets/certs - ./ldap_data/var/lib:/var/lib/ldap - ./ldap_data/etc/ldap/slapd.d:/etc/ldap/slapd.d networks: - ldap ports: - 172.21.0.1:389:389 - 172.21.0.1:636:636 phpldapadmin: image: "osixia/phpldapadmin:0.7.1" hostname: "nas.nas" restart: always networks: - ldap - docker0 expose: - 443 links: - open-ldap:open-ldap-server volumes: - ./certs:/container/service/phpldapadmin/assets/apache2/certs environment: - VIRTUAL_HOST=ldap.* - VIRTUAL_PORT=443 - VIRTUAL_PROTO=https - CERT_NAME=NAS.cloudns.cc - "PHPLDAPADMIN_LDAP_HOSTS=open-ldap-server" #- "PHPLDAPADMIN_HTTPS=false" - "PHPLDAPADMIN_HTTPS_CRT_FILENAME=certs/ldap_server.crt" - "PHPLDAPADMIN_HTTPS_KEY_FILENAME=private/ldap_server.key" - "PHPLDAPADMIN_HTTPS_CA_CRT_FILENAME=certs/ldap_server.crt" - "PHPLDAPADMIN_LDAP_CLIENT_TLS_REQCERT=allow" ldap-ssp: image: openfrontier/ldap-ssp:https volumes: - /etc/ssl/certs/ssl-cert-snakeoil.pem:/etc/ssl/certs/ssl-cert-snakeoil.pem - /etc/ssl/private/ssl-cert-snakeoil.key:/etc/ssl/private/ssl-cert-snakeoil.key restart: always networks: - ldap - docker0 expose: - 80 links: - open-ldap:open-ldap-server environment: - VIRTUAL_HOST=ssp.* - VIRTUAL_PORT=80 - VIRTUAL_PROTO=http - CERT_NAME=NAS.cloudns.cc - "LDAP_URL=ldap://open-ldap-server:389" - "LDAP_BINDDN=cn=admin,dc=nas,dc=nas" - "LDAP_BINDPW=ADMIN_PASSWORD" - "LDAP_BASE=ou=users,dc=nas,dc=nas" - "MAIL_FROM=admin@nas.nas" - "PWD_MIN_LENGTH=8" - "PWD_MIN_LOWER=3" - "PWD_MIN_DIGIT=2" - "SMTP_HOST=" - "SMTP_USER=" - "SMTP_PASS=" 

然后,您需要转储并删除:


 $ cd /tank0/docker/services/ldap $ tar czf ~/ldap_backup.tgz . $ ldapsearch -Wx -D "cn=admin,dc=nas,dc=nas" -b "dc=nas,dc=nas" -H ldap://172.21.0.1 -LLL > ldap_dump.ldif $ docker-compose down $ rm -rf ldap_data $ docker-compose up -d 

为了防止服务器从转储中恢复时不会出现重复的元素,请删除文件中的行:


 dn: dc=nas,dc=nas objectClass: top objectClass: dcObject objectClass: organization o: NAS dc: nas dn: cn=admin,dc=nas,dc=nas objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator userPassword:: PASSWORD_BASE64 

并还原用户和组:


 $ ldapadd -Wx -D "cn=admin,dc=nas,dc=nas" -H ldap://172.21.0.1 -f ldap_dump.ldif 

这样的野兽将出现在数据库中:


 dn: cn=readonly,dc=nas,dc=nas cn: readonly objectClass: simpleSecurityObject objectClass: organizationalRole userPassword:: PASSWORD_BASE64 description: LDAP read only user 

容器将在LDAP服务器配置中创建角色。
恢复后执行检查并删除备份:


 $ rm ~/ldap_backup.tgz 

将组添加到LDAP


方便的是将LDAP用户分为类似于Linux上POSIX组的组。
例如,可以创建其用户将有权访问存储库,访问云或访问库的组。


可以轻松地将组添加到phpLDAPAdmin中,而我不会在此重点介绍。


我只注意以下几点:


  • 该组是从“默认”模板创建的。 这不是POSIX组,而是一组名称。
  • 因此,该组具有一个objectClass属性,其中包含groupOfUniqueNames的值。

将组添加到phpLDAPAdmin


码头工人


在Docker中,几乎所有事情都为您完成。
默认情况下,它使用OMV内核中包含的系统调用限制


 # grep SECCOMP /boot/config-4.16.0-0.bpo.2-amd64 CONFIG_HAVE_ARCH_SECCOMP_FILTER=y CONFIG_SECCOMP_FILTER=y CONFIG_SECCOMP=y 

在这里,您可以详细了解基本的Docker安全规则。
另外,如果启用了AppArmor,则Docker可以与其集成,并将其配置文件转发到container


联播网


消除操作系统发现


网络位于路由器后面,但可以通过更改网络堆栈的某些参数来进行好奇的练习,以使答案无法识别OS。
这样做几乎没有真正的好处,因为攻击者将研究服务标语并且仍然了解您使用的是什么操作系统。


Nmap显示设备上正在运行的操作系统。
 # nmap -O localhost Starting Nmap 7.40 ( https://nmap.org ) at 2018-08-26 14:39 MSK Nmap scan report for localhost (127.0.0.1) Host is up (0.000015s latency). Other addresses for localhost (not scanned): ::1 Not shown: 992 closed ports PORT STATE SERVICE 53/tcp open domain 80/tcp open http 443/tcp open https 5432/tcp open postgresql Device type: general purpose Running: Linux 3.X|4.X OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4 OS details: Linux 3.8 - 4.6 Network Distance: 0 hops OS detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 4.07 seconds 

从sysctl.conf下载设置:


 # sysctl -p /etc/sysctl.conf net.ipv4.conf.all.accept_redirects = 0 net.ipv6.conf.all.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.all.accept_source_route = 0 net.ipv6.conf.all.accept_source_route = 0 net.ipv4.tcp_rfc1337 = 1 net.ipv4.ip_default_ttl = 128 net.ipv4.icmp_ratelimit = 900 net.ipv4.tcp_synack_retries = 7 net.ipv4.tcp_syn_retries = 7 net.ipv4.tcp_window_scaling = 1 net.ipv4.tcp_timestamps = 1 

等等...


Nmap无法确定操作系统。
 # nmap -O localhost Starting Nmap 7.40 ( https://nmap.org ) at 2018-08-26 14:40 MSK Nmap scan report for localhost (127.0.0.1) Host is up (0.000026s latency). Other addresses for localhost (not scanned): ::1 Not shown: 992 closed ports PORT STATE SERVICE 53/tcp open domain 80/tcp open http 443/tcp open https 5432/tcp open postgresql No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ). TCP/IP fingerprint: OS:SCAN(V=7.40%E=4%D=8/26%OT=53%CT=1%CU=43022%PV=N%DS=0%DC=L%G=Y%TM=5B8291C OS:3%P=x86_64-pc-linux-gnu)SEQ(SP=FA%GCD=1%ISR=105%TI=Z%CI=I%TS=8)OPS(O1=MF OS:FD7ST11NW7%O2=MFFD7ST11NW7%O3=MFFD7NNT11NW7%O4=MFFD7ST11NW7%O5=MFFD7ST11 OS:NW7%O6=MFFD7ST11)WIN(W1=AAAA%W2=AAAA%W3=AAAA%W4=AAAA%W5=AAAA%W6=AAAA)ECN OS:(R=Y%DF=Y%T=80%W=AAAA%O=MFFD7NNSNW7%CC=Y%Q=)T1(R=Y%DF=Y%T=80%S=O%A=S+%F= OS:AS%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y%DF=Y%T=80%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T5( OS:R=Y%DF=Y%T=80%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=80%W=0%S=A%A=Z% OS:F=R%O=%RD=0%Q=)T7(R=Y%DF=Y%T=80%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)U1(R=Y%DF=N OS:%T=80%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%DFI=N%T=80%C OS:D=S) Network Distance: 0 hops OS detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 19.52 seconds 

这些设置需要写入/etc/sysctl.conf ,然后在每次重新启动时将自动读取它们。


完整的/etc/sysctl.conf
 ################################################################### # Additional settings - these settings can improve the network # security of the host and prevent against some network attacks # including spoofing attacks and man in the middle attacks through # redirection. Some network environments, however, require that these # settings are disabled so review and enable them as needed. # # Do not accept ICMP redirects (prevent MITM attacks) net.ipv4.conf.default.accept_redirects = 0 net.ipv6.conf.default.accept_redirects = 0 net.ipv4.conf.all.accept_redirects = 0 net.ipv6.conf.all.accept_redirects = 0 # _or_ # Accept ICMP redirects only for gateways listed in our default # gateway list (enabled by default) # net.ipv4.conf.all.secure_redirects = 1 # # Do not send ICMP redirects (we are not a router) net.ipv4.conf.all.send_redirects = 0 # # Do not accept IP source route packets (we are not a router) net.ipv4.conf.all.accept_source_route = 0 net.ipv6.conf.all.accept_source_route = 0 ## protect against tcp time-wait assassination hazards ## drop RST packets for sockets in the time-wait state ## (not widely supported outside of linux, but conforms to RFC) net.ipv4.tcp_rfc1337 = 1 # # Log Martian Packets #net.ipv4.conf.all.log_martians = 1 # ################################################################### # Magic system request Key # 0=disable, 1=enable all # Debian kernels have this set to 0 (disable the key) # See https://www.kernel.org/doc/Documentation/sysrq.txt # for what other values do #kernel.sysrq=1 ################################################################### # Protected links # # Protects against creating or following links under certain conditions # Debian kernels have both set to 1 (restricted) # See https://www.kernel.org/doc/Documentation/sysctl/fs.txt #fs.protected_hardlinks=0 #fs.protected_symlinks=0 vm.overcommit_memory = 1 vm.swappiness = 10 ################################################################### # Anti-fingerprinting. # # Def: 64. net.ipv4.ip_default_ttl = 128 #   ICMP  (  1000) net.ipv4.icmp_ratelimit = 900 #    ,     . # Def: 5. net.ipv4.tcp_synack_retries = 7 # Def: 5. net.ipv4.tcp_syn_retries = 7 #   TCP window  timespamp    1323. net.ipv4.tcp_window_scaling = 1 net.ipv4.tcp_timestamps = 1 # Redis requirement. net.core.somaxconn = 511 

防止定义服务版本的保护更加有用,攻击者还可以使用Nmap:


 # nmap -sV -sR --allports --version-trace 127.0.0.1 

结果对于系统而言不是很好。
 Not shown: 991 closed ports PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.4p1 Debian 10+deb9u3 (protocol 2.0) 25/tcp open smtp Postfix smtpd 80/tcp open http nginx 1.13.12 111/tcp open rpcbind 2-4 (RPC #100000) 139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP) 443/tcp open ssl/http nginx 1.13.12 445/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP) 3493/tcp open nut Network UPS Tools upsd 8000/tcp open http Icecast streaming media server 2.4.2 Service Info: Hosts: nas.localdomain, NAS; OS: Linux; CPE: cpe:/o:linux:linux_kernel Final times for host: srtt: 22 rttvar: 1 to: 100000 

但是由于服务的伪装,并非一切都是顺利的:


  • 对于每种服务,这里需要一种单独的方法。
  • 删除版本的功能并非始终可用。

例如,对于SSH,可以在/etc/ssh/sshd_confg添加DebianBanner no选项。


结果:


 22/tcp open ssh OpenSSH 7.4p1 (protocol 2.0) 

更好的是,它将无法正常工作:SSH使用该版本来确定支持哪些功能,并且可以仅通过修补服务器来更改它。


港口敲门


不是最知名的安全技术,它允许知道密钥的远程用户连接到封闭端口。
这项工作类似于密码锁 :每个人都知道服务守护程序正在服务器上运行,但是直到拨入密码后“它们都不存在”。
例如,为了连接到SSH服务器,用户需要打开UDP端口7000,TCP 7007和UDP 7777。
之后,防火墙将使用其IP在关闭的 TCP端口22上启动。


您可以在此处阅读有关其工作原理的更多信息。 并在Debian手册中


我不建议使用,因为 通常,fail2ban就足够了。


防火墙功能


我通过Web GUI OpenMediaVault配置防火墙,我向您建议。



打开必要的端口,例如443和22,其余的进行品尝。 还建议启用丢弃数据包的日志记录。


SSH


如果SSH挂在向Internet开放的端口22上,您将收到许多有趣的消息...
 # grep "invalid user" /var/log/auth.log|head Aug 26 00:07:57 nas sshd[29786]: input_userauth_request: invalid user test [preauth] Aug 26 00:07:59 nas sshd[29786]: Failed password for invalid user test from 185.143.160.137 port 51268 ssh2 Aug 26 00:11:01 nas sshd[5641]: input_userauth_request: invalid user 0 [preauth] Aug 26 00:11:01 nas sshd[5641]: Failed none for invalid user 0 from 5.188.10.180 port 49025 ssh2 Aug 26 00:11:04 nas sshd[5644]: input_userauth_request: invalid user 0101 [preauth] Aug 26 00:11:06 nas sshd[5644]: Failed password for invalid user 0101 from 5.188.10.180 port 59867 ssh2 Aug 26 00:32:55 nas sshd[20367]: input_userauth_request: invalid user ftp [preauth] Aug 26 00:32:56 nas sshd[20367]: Failed password for invalid user ftp from 5.188.10.144 port 47981 ssh2 Aug 26 00:32:57 nas sshd[20495]: input_userauth_request: invalid user guest [preauth] Aug 26 00:32:59 nas sshd[20495]: Failed password for invalid user guest from 5.188.10.144 port 34202 ssh2 

冒着琐碎的风险,我仍然记得它是必需的:


  • 严格禁止root登录。
  • 将登录名限制为仅指定用户。
  • 将端口更改为非标准端口。
  • 建议禁用密码身份验证,仅保留密钥。

阅读更多内容是可能的,例如在这里


通过菜单“服务-> SSH”,可以从OpenMediaVault界面轻松完成所有这些操作。
除非我没有将端口更改为非标准端口,否则将22保留在本地网络上,只是替换了NAT路由器中的端口。


这是我尝试编译的一个有趣的帐户列表,直到我将SSHD端口更改为不同于22的端口。
 # grep "invalid user" /var/log/auth.log|sed 's/.*invalid user \([^ ]*\) .*/\1/'|sort|uniq 0 0101 1234 22 admin ADMIN administrateur administrator admins alfred amanda amber Anonymous apache avahi backup@network bcnas benjamin bin cacti callcenter camera cang castis charlotte clamav client cristina cron CSG cvsuser cyrus david db2inst1 debian debug default denis elvira erik fabio fax ftp ftpuser gary gast GEN2 guest I2b2workdata2 incoming jboss john juan matilda max mia miner muhammad mysql nagios nginx noc office oliver operator oracle osmc pavel pi pmd postgres PROCAL prueba RSCS sales sales1 scaner selena student07 sunos support sybase sysadmin teamspeak telecomadmin test test1 test2 test3 test7 tirocu token tomcat tplink ubnt ubuntu user1 vagrant victor volition www-data xghwzp xxx zabbix zimbra 

一旦完成,未经授权的登录尝试将变得不那么频繁。


为了进一步改善这种情况,有可能在几次登录尝试后阻止攻击者访问某些IP。


可用于:


  • Fail2ban 。 一个流行的实用程序,不仅适用于SSH,而且适用于许多其他应用程序。
  • 拒绝主机 看起来像是fail2ban。
  • Sshguard ,如果您愿意,可以尝试使用它,但是我对此并不感兴趣。

我正在使用fail2ban。 它将监视日志中某些IP方面的各种不良操作,并在超出响应数量的情况下将其禁止:


/var/log/fail2ban.log。
 2018-08-29 21:17:25,351 fail2ban.filter [8650]: INFO [sshd] Found 5.188.10.144 2018-08-29 21:17:25,473 fail2ban.actions [8650]: NOTICE [sshd] Ban 5.188.10.144 2018-08-29 21:17:27,359 fail2ban.filter [8650]: INFO [sshd] Found 5.188.10.144 2018-08-29 21:28:13,128 fail2ban.filter [8650]: INFO [sshd] Found 5.188.10.176 2018-08-29 21:28:13,132 fail2ban.filter [8650]: INFO [sshd] Found 5.188.10.176 2018-08-29 21:28:15,137 fail2ban.filter [8650]: INFO [sshd] Found 5.188.10.176 2018-08-29 21:28:20,145 fail2ban.filter [8650]: INFO [sshd] Found 5.188.10.176 2018-08-29 21:28:25,153 fail2ban.filter [8650]: INFO [sshd] Found 5.188.10.176 2018-08-29 21:28:25,421 fail2ban.actions [8650]: NOTICE [sshd] Ban 5.188.10.176 2018-08-29 21:30:05,272 fail2ban.filter [8650]: INFO [sshd] Found 5.188.10.180 2018-08-29 21:30:05,274 fail2ban.filter [8650]: INFO [sshd] Found 5.188.10.180 2018-08-29 21:30:13,285 fail2ban.filter [8650]: INFO [sshd] Found 5.188.10.180 2018-08-29 21:30:13,286 fail2ban.filter [8650]: INFO [sshd] Found 5.188.10.180 2018-08-29 21:30:15,289 fail2ban.filter [8650]: INFO [sshd] Found 5.188.10.180 2018-08-29 21:30:15,803 fail2ban.actions [8650]: NOTICE [sshd] Ban 5.188.10.180 

通过添加防火墙规则来禁止。 在指定的时间后,该规则将被删除,用户可以再次尝试登录。


最初,只有SSH处于打开状态,但是可以启用对Web服务器和其他服务(至少是相同的OMV)的日志的控制。
并且,从容器中取出日志并在其上设置fail2ban。


我建议添加服务来品尝。
您可以在此处或在本机Wiki上了解有关配置的更多信息


日志


手表


为了方便起见,应该安装一个小的实用程序。 它将突出显示日志并以漂亮的形式显示它们。
可以使用任何此类实用程序 ,主要是突出显示日志的错误和问题区域,以便于对其进行可视化分析。


日志检查


只需安装和配置logcheck就是值得的,这样当您确定日志中报告的配置问题时,您会立即在邮件中看到此问题。
尽管确实需要进行调整,但它可以帮助您查看出了什么问题。


安装方式:


 # apt-get install logcheck 

安装后,它将立即发送报告。


报告示例。
 System Events =-=-=-=-=-=-= Oct 2 02:02:15 nas kernel: [793847.981226] [DROPPED] IN=br-ce OUT= PHYSIN=veth6c2a68e MAC=ff:ff:ff:ff:ff:ff: SRC=172.22.0.11 DST=255.255.255.255 LEN=29 TOS=0x00 PREC=0x00 TTL=64 ID=40170 DF PROTO=UDP SPT=35623 DPT=35622 LEN=9 Oct 2 02:02:20 nas hddtemp[13791]: /dev/sdh: Micron_1100 N #020Ђ: 32 C Oct 2 02:02:37 nas kernel: [793869.247128] [DROPPED] IN=br-7ba OUT= MAC= SRC=172.31.0.1 DST=172.31.255.255 LEN=239 TOS=0x00 PREC=0x00 TTL=128 ID=23017 DF PROTO=UDP SPT=138 DPT=138 LEN=219 Oct 2 02:02:37 nas kernel: [793869.247174] [DROPPED] IN=br-7ba OUT= MAC= SRC=172.31.0.1 DST=172.31.255.255 LEN=232 TOS=0x00 PREC=0x00 TTL=128 ID=23018 DF PROTO=UDP SPT=138 DPT=138 LEN=212 Oct 2 02:02:37 nas kernel: [793869.247195] [DROPPED] IN=br-673 OUT= MAC= SRC=192.168.224.1 DST=192.168.239.255 LEN=239 TOS=0x00 PREC=0x00 TTL=128 ID=8959 DF PROTO=UDP SPT=138 DPT=138 LEN=219 Oct 2 02:02:37 nas kernel: [793869.247203] [DROPPED] IN=br-673 OUT= MAC= SRC=192.168.224.1 DST=192.168.239.255 LEN=232 TOS=0x00 PREC=0x00 TTL=128 ID=8960 DF PROTO=UDP SPT=138 DPT=138 LEN=212 Oct 2 02:02:50 nas hddtemp[13791]: /dev/sdh: Micron_1100 N #020Ђ: 32 C 

可以看出有很多多余的东西,进一步的调整将归结为过滤它。


首先,关闭hddtemp,由于SSD名称中的非ASCII字符,此操作无法正常工作。
修复hddtemp文件后,消息停止出现:


/etc/logcheck/ignore.d.server/hddtemp
 ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ hddtemp\[[0-9]+\]: /dev/([hs]d[az]|sg[0-9]):.*[0-9]+.*[CF] ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ hddtemp\[[0-9]+\]: /dev/([hs]d[az]|sg[0-9]):.*drive is sleeping 

然后,可以查看logcheck所说的内容阻止了防火墙的广播流量:


 [793869.247128] [DROPPED] IN=br-7ba OUT= MAC= SRC=172.31.0.1 DST=172.31.255.255 LEN=239 TOS=0x00 PREC=0x00 TTL=128 ID=23017 DF PROTO=UDP SPT=138 DPT=138 LEN=219 

因此,您需要启用来自路由器和容器的广播流量:


  • 具有urbackup的容器的端口35622。
  • 路由器的端口5678是RouterOS邻居发现。 可以在路由器上禁用它。
  • 指向地址224.0.0.251的端口5353是mDNS

检查日志检查:


 sudo -u logcheck logcheck -t -d 

最后,问题变得显而易见:


 Oct 21 21:58:18 nas systemd[1]: Removed slice User Slice of user. Oct 21 21:58:31 nas systemd[1]: smbd.service: Unit cannot be reloaded because it is inactive. Oct 21 21:58:31 nas root: /etc/dhcp/dhclient-enter-hooks.d/samba returned non-zero exit status 1 

事实证明,SAMBA无法启动。 确实,分析表明我是通过systemctl伪装的,OMV试图启动它。


Logcheck仍然会通过各种邮件发送垃圾邮件。
例如,在这里传递了zfs-auto-snapshot:


 Oct 21 22:00:57 nas zfs-auto-snap: @zfs-auto-snap_frequent-2018-10-21-1900, 16 created, 16 destroyed, 0 warnings. 

要忽略:


/etc/logcheck/ignore.d.server/zfs-auto-snapshot
 ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ zfs-auto-snap: \@zfs-auto-snap_[[:alnum:]-]+, [0-9]+ created, [0-9]+ destroyed, 0 warnings.$ 

rrdcached也被忽略:


/etc/logcheck/ignore.d.server/rrdcached
 ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ rrdcached\[[0-9]+\]: flushing old values$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ rrdcached\[[0-9]+\]: rotating journals$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ rrdcached\[[0-9]+\]: started new journal [./[:alnum:]]+$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ rrdcached\[[0-9]+\]: removing old journal [./[:alnum:]]+$ 

另外,建议删除zed(如果仍未删除):


/etc/logcheck/ignore.d.server/zed
 ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (/usr/bin/)?zed: .*$ ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (/usr/bin/)?zed\[[0-9]+\]: .*$ 

等等。 许多人认为logcheck是一个非常无用的实用程序。
如果您将其用作设置并忘记的东西,则为真。


但是,如果您了解logcheck只是一个自定义的日志过滤器,没有启发式,魔术和自适应算法,就不会出现其必要性的问题。 反复分析他发送的内容,或者通过添加它以忽略或更正它,逐渐有可能获取信息丰富的报告。


使用自动化工具进行分析比使用双手通过相同的正则表达式运行日志要好得多,并且通常比使用Splunk等完整的数据分析系统要好。


Logcheck及其配置可以在Wiki Gentoo此处阅读


节点级IDS


在这里,我将参考我自己的文章“ SOC领域解决方案的简要分析和数据传输网络中神经网络异常检测器的开发” ,其中有几个示例。


您可以在Wiki上阅读有关IDS 更完整的评论和比较。


STIG-4


一个复杂的大型脚本,用于对RedHat中已知差距的静态分析。
Debian中有其端口 ,我建议至少下载并运行一次。


STIG-4操作示例
 # cd root@nas:~# git clone https://github.com/hardenedlinux/STIG-4-Debian Cloning into 'STIG-4-Debian'... remote: Enumerating objects: 572, done. remote: Total 572 (delta 0), reused 0 (delta 0), pack-reused 572 Receiving objects: 100% (572/572), 634.37 KiB | 0 bytes/s, done. Resolving deltas: 100% (316/316), done. root@nas:~# cd STIG-4-Debian/ root@nas:~/STIG-4-Debian# bash stig-4-debian.sh -H Script Run: Mon Nov 12 23:58:34 MSK 2018 Start checking process... [ FAIL ] The cryptographic hash of system files and commands must match vendor values. ... Pass Count: 54 Failed Count: 137 

使用此脚本的过程大致如下:


  • 摆脱脚本。
  • [ FAIL ]在互联网上搜索每一行。
  • 通常,将找到STIG在线数据库的链接。
  • 请按照数据库中的说明进行更正,以免它是Debian。
  • 再次运行脚本。

猎手


关于RkHunter的文章 太多了
长期使用,广泛使用,还在发展中。 有一个Debian仓库。


虎牌


执行系统审核和入侵检测的模块化外壳脚本。
它有点类似于STIG-4。
它可以使用第三方实用程序来分析日志,以检测违反校验和的行为。


由大量不同的模块组成。


例如,有一个模块可以检测使用已删除文件的服务,这种情况是在系统升级过程中更改了服务使用的库时发生的,但是由于某种原因服务没有重新启动。


有一些模块可用于搜索不再使用的服务用户,检查系统是否缺少安全补丁,检查umask等。


男人的更多细节。


它已经有10年没有开发了(是的,我不是唯一放弃软件的人)。


萨姆海因


典型的HIDS可以:


  • 通过加密哈希检查整个系统的完整性。
  • 搜索具有已安装SUID(不应安装)的各种可执行文件。
  • 检测隐藏的进程。
  • 签署日志和数据库。

此外,它还具有通过Web界面进行的集中监视以及将日志集中发送到服务器的功能。
, .
.


, , . , , , , .


- HIDS: .
Samhain, .


Tripwire


, Samhain, Tripwire — .
, .


Lynis


RkHunter .


, .
.
Tiger , , .
, . , , Lynix Tripwire.


Chkrootkit


. .
:


  • , .
  • .
  • , latslog, wtmp utmp.
  • , , .

.


Ninja


Linux.


ninja-build.


, . UID/GID, Ninja , , (, , ).
(, su).
, .


Ubuntu , Debian.



. . , , , .
Nmap W3af Web-.



Linux ( ) .
. , .


, , , .


" Linux" IBM .


NAS , AppArmor.
, , .
, , , .


Access Control Lists


, .
, ZFS .


ACL ZFS.
  • 将新文件添加到目录的权限。
  • 在目录中创建子目录的权限。
  • 删除文件的权限。
  • 删除目录内文件或目录的权限。
  • 执行文件或搜索目录内容的权限。
  • 列出目录内容的权限。
  • 读取ACL的权限(ls命令)。
  • 允许读取基本文件属性(ACL以外的“ stat”命令级别的属性)。
  • 读取文件内容的权限。
  • 读取扩展文件属性或在目录中搜索扩展文件属性的权限。
  • 创建扩展属性或写入扩展属性目录的权限。
  • 修改或替换文件内容的权限。
  • , , .
  • ACL chmod.
  • . chown chgrp .
  • , . PRIV_FILE_CHOWN.
  • ACL .
  • ACL .
  • ACL , , . ACL file_inherit, dir_inherit .
  • ACL , .

ACL , , , . .


EXT , ZFS ACL setfacl/getfacl , chmod ls .


AppArmor



.


, , exec , , open , exec .
, .
AppArmor , .
, .
capabilites.


, . , , , .


ping.
 #include <tunables/global> profile ping /{usr/,}bin/ping flags=(complain) { #include <abstractions/base> #include <abstractions/consoles> #include <abstractions/nameservice> capability net_raw, capability setuid, network inet raw, network inet6 raw, /{,usr/}bin/ping mixr, /etc/modules.conf r, # Site-specific additions and overrides. See local/README for details. #include <local/bin.ping> } 

, , .. . , , ( local/bin.ping ), , .


deb-based .
firejail , .


, , .


Debian, .


SELinux


SELinux体系结构


.
NSA , Debian .


SELinux " " (type enforcement).


, , , SELinux . "".


, , firefox_t .
SELinux , .


一个例子:


 allow firefox_t user_home_t : file { read write }; 

, , firefox_t , , user_home_t .


一个例子:


 allow user_t user_home_t:file { create read write unlink }; 

user_t , , user_home_t . user_t , , .


, .


AppArmor -, , , .


SELinux .
  • SELinux Linux. su sudo, SELinux . Linux SELinux , 1:1, root.
  • , , . " ", "Web-", " ". , object_r .
    , .
  • . — , .
  • . , , . , user_u:user_r:user_t , user_u:object_r:user_home_t . :

 user:role:type:range 

— SELinux user. — , . — MLS .


, , , user_home_t. user_home_t — , , .


  • , dir file , , . , . , file (create), (read), (write) (unlink), unix_stream_socket object ( UNIX) (create), (connect), (sendto).

, .
. , (, ), .


, AppArmor, permissive , , .
.
, , AppArmor .


SELinux .
.
IBM .


GrSecurity


Debian - . , , .
, ( ), — Gentoo . : hardening .


, .


Debian , GrSecurity PaX.


Tomoyo


Tomoyo Debian .


. AppArmor, . 2003 .
, , .
, AppArmor, .



/etc/securetty , root ( ), .


PAM, /etc/security .


, Samhain Tripwire, debsums , .


结论


. , .


, Github , .

Source: https://habr.com/ru/post/zh-CN421279/


All Articles