برامج أمان إضافية لـ NAS


سلسلة المقالات بعنوان بناء ناس آمن . لذلك ، ستنظر هذه المقالة في زيادة مستوى الأمان. أيضا ، سيتم وصف تلك الأدوات التي لم أستخدمها ، ولكن من الممكن تطبيقها.


من وكيف؟


من سيهاجم النظام وكيف سيفعل ذلك؟


عادة ما يكون هذا هو السؤال الأول الذي يجب الإجابة عليه قبل الحديث عن الأمن.
على الأقل في حالة ناس ، مثل هذه الإجابة ضمنية بالفعل. ولكن من أجل الإجابة الكاملة على هذا السؤال ، يتم بناء نموذج التهديد ونموذج الدخيل.


تشرع الشركات في مرحلة نمذجة التهديد في دورات تطويرها.
مايكروسوفت لديها SDL لذلك ، لدى الناس نماذج أخرى .


إنها تعني استخدام تقنيات معينة ، مثل STRIDE أو DREAD (لا تزال STRIDE أكثر عمومية ومدعومة بشكل جيد بشكل فعال).


في STRIDE ، على سبيل المثال ، يتم بناء النموذج على تدفقات البيانات وعادة ما يكون كبيرًا وثقيلًا وغير مفهوم جيدًا. ومع ذلك ، توفر الأداة قائمة بالتهديدات المحتملة ، مما يسهل النظر فيها.


نموذج التهديد هو معلومات سرية لأنه يسهل على المهاجم تحليل النظام والعثور على نقاط الضعف. إذا حصل على نموذج ، فلن يضطر إلى بنائه بمفرده ، لأن المحللين قد اعتنوا بالفعل بكل شيء.


كانت دقيقة من الدعاية.



هذه هي الطريقة التي تبني بها الشركات الجادة النموذج. وإذا كان هذا مثيرًا للاهتمام ، يمكنني وصفه بطريقة أو بأخرى في مقالة منفصلة.


هنا سأصف ما يسمى بـ "التصلب" باللغة الإنجليزية وسأتعامل مع العيوب الأمنية التي حدثت أثناء بناء النظام.


بشكل أساسي ، يتم الحفاظ على الأمان عند هذا المستوى عن طريق إغلاق ثغرات النظام المعروفة ومراقبتها والتحقق منها بشكل دوري.


الأدب ذو الصلة


ماذا تقرأ:



لقطات و Docker


في السابق ، تم تثبيت zfs-autosnapshot. لقد ساعدني مرارا ، لأنه يمكنني استعادة التكوينات التالفة (لـ Nextcloud ، على سبيل المثال) من اللقطات.
ومع ذلك ، مع مرور الوقت ، بدأ النظام في التباطؤ ، وتكاثرت عدة آلاف من اللقطات.


com.sun:auto-snapshot=false أنه عند إنشاء نظام الملفات الرئيسي للحاويات ، نسيت تعيين العلم com.sun:auto-snapshot=false .


في المقالة الأصلية ، تم إصلاح هذه المشكلة بالفعل ، هنا سأوضح كيفية التخلص من اللقطات الإضافية.


تفاصيل حول كيفية إصلاح الخطأ.

أولاً ، قم بإيقاف تشغيل 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" 

ملف كامل تحت المفسد.


عامل ميناء دوكر
 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 إلى مجموعات مشابهة لمجموعات POSIX على Linux.
على سبيل المثال ، من الممكن إنشاء مجموعات يمكن لمستخدميها الوصول إلى المستودعات أو الوصول إلى السحابة أو الوصول إلى المكتبة.


تتم إضافة المجموعات بسهولة إلى 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 التكامل معه وإعادة توجيه ملفات تعريفه إلى الحاوية .


شبكة


القضاء على اكتشاف نظام التشغيل


تقع الشبكة خلف جهاز التوجيه ، ولكن من الممكن القيام بتمرين غريب عن طريق تغيير بعض معلمات مكدس الشبكة بحيث لا يمكن تحديد نظام التشغيل من خلال الإجابات.
هناك فائدة حقيقية قليلة من هذا ، لأن المهاجم سيدرس لافتات الخدمة ولا يزال يفهم ما هو نظام التشغيل الذي تستخدمه.


يعرض 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 ، ثم سيتم قراءتها تلقائيًا عند كل عملية إعادة تشغيل.


Full /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 ، من الممكن إضافة خيار DebianBanner no إلى /etc/ssh/sshd_confg .


نتيجة:


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

أفضل ، للأسف ، لن تعمل: يتم استخدام الإصدار من قبل SSH لتحديد الميزات المدعومة ، ولا يمكن تغييره إلا من خلال تصحيح الخادم .


طرق الميناء


ليست تقنية الأمان الأكثر شهرة ، مما يسمح للمستخدم البعيد الذي يعرف السر بالاتصال بمنفذ مغلق.
يشبه العمل قفل الشفرة : يعلم الجميع أن شياطين الخدمة تعمل على الخادم ، ولكنها "ليست موجودة" حتى يتم طلب الرمز.
على سبيل المثال ، للاتصال بخادم SSH ، يحتاج المستخدم للطرق على منافذ UDP 7000 و TCP 7007 و UDP 7777.
بعد ذلك ، مع IP الخاص به ، سيبدأ تشغيل جدار الحماية على منفذ TCP مغلق 22.


يمكنك قراءة المزيد حول كيفية عمل هذا هنا . وفي دليل ديبيان .


أنا لا أوصي باستخدام ، مثل fail2ban كافية عادة.


جدار الحماية


أقوم بتهيئة جدار الحماية من خلال WebMI OpenMediaVault الذي أوصي به لك.



افتح المنافذ الضرورية مثل 443 و 22 والباقي حسب الذوق. من المستحسن أيضًا تمكين تسجيل الحزم المسقطة.


Ssh


إذا تم تعليق SSH على المنفذ 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 

في خطر الظهور بمظهر تافه ، ما زلت أذكر أنه مطلوب:


  • يمنع تسجيل دخول الجذر تمامًا.
  • قصر تسجيل الدخول على مستخدمين محددين فقط.
  • تغيير المنفذ إلى غير قياسي.
  • من المستحسن تعطيل مصادقة كلمة المرور ، مع ترك المفتاح فقط.

اقرأ المزيد ممكن ، على سبيل المثال هنا .


كل هذا يتم بسهولة من واجهة OpenMediaVault من خلال قائمة "الخدمات -> SSH".
باستثناء أنني لم أغير المنفذ إلى غير قياسي ، وترك 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 ، ولكن أيضًا للعديد من التطبيقات الأخرى.
  • Denyhosts يبدو الفشل 2.
  • 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 فقط ، ولكن من الممكن تمكين التحكم في سجلات خادم الويب والخدمات الأخرى ، على الأقل من نفس OMV .
وأيضًا ، أخرج السجلات من الحاويات وقم بتعيين fail2ban عليها أيضًا.


أوصي بإضافة خدمات حسب الذوق.
يمكنك قراءة المزيد حول التكوين ، على سبيل المثال ، هنا أو على ويكي الأصلي .


سجلات


لوتش


أداة صغيرة يجب تثبيتها للراحة. سوف يبرز السجلات ويظهرها في شكل جميل.
من الممكن استخدام أي أداة من هذا القبيل ، والشيء الرئيسي هو أن يتم تمييز الأخطاء ومجالات المشاكل في السجلات بحيث يتم تسهيل تحليلها البصري.


تسجيل الدخول


من الجدير تثبيت وتكوين فحص السجل ببساطة حتى عندما تحدد مشاكل التكوين التي تم الإبلاغ عنها في السجلات ، سترى ذلك على الفور في البريد.
إنه يساعد كثيرًا على رؤية الخطأ الذي يحدث ، على الرغم من أنه يتطلب الضبط.


التثبيت:


 # 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 ، الذي لا يعمل بشكل صحيح بسبب أحرف غير ASCII في اسم SSD.
بعد إصلاح ملف 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 

بعد ذلك ، من الممكن رؤية ما يقوله سجل التحقق أنه يحظر حركة مرور البث بواسطة جدار الحماية:


 [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 

لذلك ، تحتاج إلى تمكين حركة مرور البث من جهاز التوجيه والحاويات:


  • المنفذ 35622 من الحاوية مع urbackup.
  • المنفذ 5678 من جهاز التوجيه هو اكتشاف جوار RouterOS. يمكن تعطيله على جهاز التوجيه.
  • المنفذ 5353 لمعالجة 224.0.0.251 هو 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 

اتضح أن سامبا لا يبدأ. في الواقع ، أظهر التحليل أنني أخفيته من خلال 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:]]+$ 

أيضًا ، يُنصح بإزالة زيد إذا لم يتم إزالته بعد:


/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]+\]: .*$ 

حسنا وهلم جرا. يعتقد الكثير من الناس أن تسجيل الدخول أداة مفيدة جدًا.
هذا صحيح إذا كنت تستخدمه كشيء قمت بتعيينه ونسيانه.


ومع ذلك ، إذا فهمت أن فحص السجل هو مجرد عامل تصفية سجل مخصص ، بدون الاستدلال ، والسحر ، والخوارزميات التكيفية ، فلن يُطرح سؤال ضرورة ذلك. بشكل متكرر ، تحليل ما يرسل ، وإما بإضافته لتجاهله أو تصحيحه ، من الممكن تدريجياً الحصول على تقارير إعلامية.


استخدام أداة آلية للتحليل أفضل بكثير من تشغيل السجلات من خلال نفس التعبيرات العادية بيديك ، وغالبًا أفضل من استخدام نظام تحليل بيانات كامل مثل Splunk.


يمكن قراءة Logcheck وتكوينه على Wiki Gentoo وهنا .


معرفات مستوى العقدة


هنا سوف أشير إلى مقالتي الخاصة "تحليل موجز للحلول في مجال شركة نفط الجنوب وتطوير جهاز كشف الشذوذ للشبكة العصبية في شبكات نقل البيانات" ، حيث توجد عدة أمثلة.


يمكنك قراءة مراجعة ومقارنة أكثر اكتمالاً لمعرفات IDS مماثلة على Wiki .


STIG-4


نص معقد وكبير للتحليل الثابت للفجوات المعروفة من RedHat.
يوجد منفذه في دبيان ، والذي أوصي بتنزيله وتشغيله مرة واحدة على الأقل.


مثال عملية 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 عبر الإنترنت.
  • صحيح ، باتباع التعليمات الواردة في قاعدة البيانات ، إجراء خصم على حقيقة أنه دبيان.
  • قم بتشغيل البرنامج النصي مرة أخرى.

رخونتر


لقد كتب الكثير عن RkHunter .
تستخدم لفترة طويلة ، على نطاق واسع ، لا تزال تتطور. يوجد مستودع دبيان.


نمر


نص برمجي معياري يقوم بتدقيق النظام واكتشاف الاختراق.
وهي تشبه إلى حد ما STIG-4.
يمكنه استخدام أدوات الطرف الثالث لتحليل السجلات ، للكشف عن انتهاكات المجموع الاختباري.


يتكون من عدد كبير من الوحدات المختلفة.


على سبيل المثال ، هناك وحدة نمطية تكشف عن الخدمات التي تستخدم الملفات المحذوفة ، والتي تحدث عندما يتم تغيير المكتبات التي تستخدمها الخدمة أثناء عملية ترقية النظام ، ولكن لم يتم إعادة تشغيل الخدمة لسبب ما.


هناك وحدات للبحث عن مستخدمي الخدمة التي لم تعد مستخدمة ، والتحقق من النظام لعدم وجود تصحيحات أمان ، وفحص Umask ، وما إلى ذلك.


مزيد من التفاصيل في الرجل .


لم يتم تطويره لمدة 10 سنوات (نعم ، لست الوحيد الذي تخلى عن البرنامج).


Samhain


HIDS نموذجي يمكن أن:


  • تحقق من سلامة النظام بأكمله من خلال تجزئات التشفير.
  • ابحث عن الملفات التنفيذية المتنوعة باستخدام SUID المثبت ، والذي لا يجب تثبيته.
  • كشف العمليات الخفية.
  • تسجيل السجلات وقواعد البيانات.

بالإضافة إلى ذلك ، لديها مراقبة مركزية مع واجهة ويب وإرسال مركزي للسجلات إلى الخادم.
, .
.


, , . , , , , .


- 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/ar421279/


All Articles