<pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
    <pre id="vvttv"></pre>

      <p id="vvttv"></p>

          <p id="vvttv"></p>

                <p id="vvttv"></p>

                <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                  <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                    <p id="vvttv"></p>

                    原文地址:http://drops.wooyun.org/tips/2621

                    from:https://raw.githubusercontent.com/citypw/DNFWAH/master/4/d4_0x02_DNFWAH_gnu-linux_security_baseline_hardening.txt

                    By Shawn

                    0x00 關于這份文檔


                    隨著GNU/Linux在各個行業的IT基礎架構中的普及,安全問題也成為了關注的焦點, GNU/Linux主要是由GNU核心組建( 編譯器GCC, C庫Glibc等)和Linux內核組合而成, 在自由開源軟件統治著基礎平臺的大環境下,不少人認為開源一定是安全的,這 是一種不完全正確的觀念,Coverity的報告只是說明了開源比閉源更安全,這并 不代表自由開源軟件就是牢不可破的,自由開源軟件在一定程度上具有一些安全 的特性,這些特性不一定在GNU/Linux發行版中是默認開啟,這些特性中有一些是 必須在安全基線中去部署的,有一些可以根據具體需求來定制,這篇文檔主要是 介紹一些關于安全基線建設和加固的基本內容。

                    在實際的安全咨詢工作中,很多普通個人用戶和企業用戶并不是安全領域的黑客, 大多客戶都會要求給出一份簡單易懂的部署文檔,也就是所謂的安全基線,基線 和加固是很大的話題,我會盡力不斷更新這篇文檔的內容,也希望有社區的朋友 參與,本文所使用的GNU/Linux發行版是Debian。

                    0x01 安全基線


                    在遵循最小安裝和最小權限的部署原則下,還有一些地方是需要注意的,我們把 這些部分稱為安全基線。

                    1.1 安全修復更新

                    作為系統管理員,每天干的第1件事情就應該是查看生產環境的機器是否有安全修 復的更新,甚至應該除了生產環境再另外跑一套模擬環境,用于測試升級后是否 影響業務系統。

                    Debian檢查需要安全修復包:

                    sudo apt-get upgrade -s | grep -i security
                    

                    OpenSuSE發行版檢查需要安全修復的包:

                    sudo zypper lp | awk '{ if ($7=="security"){ if ($11=="update") {print $13} else{ print $11 }}}' | sed 's/:$//' | grep -v "^$" | sort | uniq
                    

                    1.2 密碼策略

                    root密碼策略至少應該考慮以下幾點:

                    1,密碼強度,至少是字母+數字一共9位以上

                    2,不同的系統密碼不能一樣

                    3,根換密碼策略(每90天更換一次)

                    4,密碼分發管理,管理不同業務服務器的系統管理員掌握不同的密碼

                    1.2.1 業務分離

                    生產環境中,不同的業務可以做水平分離,比如把不同的服務運行到不同的虛擬機 中,不需要遠程訪問的服務器可以綁定到 localhost( 比如只需要訪問本機業務的 mysql) 上。

                    1.3 SSH安全配置

                    openssh目前的默認配置文件相比以前雖然要安全的多,但還是有必要對生產系統 中的ssh服務器進行基線檢查。

                    配置文件:/etc/ssh/ssh_config

                    1,known_hosts保存相關服務器的簽名,所以必須把主機名hash:

                    HashKnownHosts yes
                    

                    2,SSH協議v1不安全:

                    Protocol 2
                    

                    3,如果沒用X11轉發的情況:

                    X11Forwarding no
                    

                    4,關閉rhosts:

                    IgnoreRhosts yes
                    

                    5,關閉允許空密碼登錄:

                    PermitEmptyPasswords no
                    

                    6,最多登錄嘗試次數:

                    MaxAuthTries 5
                    

                    7,禁止root登錄

                    PermitRootLogin no
                    

                    (可選)

                    1,關閉密碼認證,啟用公鑰認證:

                    PubkeyAuthentication yes
                    
                    PasswordAuthentication no
                    

                    2,允許或者禁止用戶/組登錄:

                    AllowGroups, AllowUsers, DenyUsers, DenyGroups

                    1.4 auditd審計框架

                    auditd是接收內核審計模塊關于系統調用信息的一個用戶態程序,可以通過一些 規則來對一些系統調用或者文件目錄進行監控。

                    安裝auditd:

                    sudo apt-get install auditd
                    

                    配置文件:/etc/audit/auditd.conf

                    存儲地址log_file = /var/log/audit/audit.log

                    審計規則的配置文件:/etc/audit/audit.rules,這里給出一個例子:

                    # First rule - delete all
                    -D
                    
                    # Increase the buffers to survive stress events.
                    # Make this bigger for busy systems
                    -b 320
                    -a always,exit -S adjtimex -S settimeofday -S stime -k time-change
                    -a always,exit -S clock_settime -k time-change
                    -a always,exit -S sethostname -S setdomainname -k system-locale
                    -w /etc/group -p wa -k identity
                    -w /etc/passwd -p wa -k identity
                    -w /etc/shadow -p wa -k identity
                    -w /etc/sudoers -p wa -k identity
                    -w /var/run/utmp -p wa -k session
                    -w /var/log/wtmp -p wa -k session
                    -w /var/log/btmp -p wa -k session
                    -w /etc/apparmor -p wa -k MAC-policy
                    -w /etc/apparmor.d -p wa -k MAC-policy
                    

                    上面的例子對一系列關于時間的系統調用進行了監控,一旦時間出現改變就會記 錄進如日志,之后對幾個跟創建/刪除用戶和組的文件也進行了監控,最后是對 apparmor的配置文件和規則目錄進行監控。在/etc/apparmor下的shell中輸入:

                    sudo touch hello
                    

                    用工具ausearch來進行查詢:


                    sudo ausearch -i -k MAC-policy
                    

                    type=CONFIG_CHANGE msg=audit(07/20/2014 20:36:48.397:58) : auid=root ses=2 op="add rule" key=MAC-policy list=exit res=1 
                    

                    type=CONFIG_CHANGE msg=audit(07/20/2014 20:36:48.445:59) : auid=root ses=2 op="add rule" key=MAC-policy list=exit res=1 
                    

                    type=PATH msg=audit(07/20/2014 20:38:42.717:61) : item=1 name=hello inode=799889 dev=08:01 mode=file,644 ouid=root ogid=root rdev=00:00 nametype=CREATE 
                    type=PATH msg=audit(07/20/2014 20:38:42.717:61) : item=0 name=/etc/apparmor inode=783766 dev=08:01 mode=dir,755 ouid=root ogid=root rdev=00:00 nametype=PARENT 
                    type=CWD msg=audit(07/20/2014 20:38:42.717:61) :  cwd=/etc/apparmor 
                    type=SYSCALL msg=audit(07/20/2014 20:38:42.717:61) : arch=i386 syscall=open success=yes exit=3 a0=bfeca8ab a1=8941 a2=1b6 a3=1 items=2 ppid=17704 pid=17876 auid=root uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts1 ses=2 comm=touch exe=/bin/touch key=MAC-policy 
                    

                    type=PATH msg=audit(07/20/2014 20:38:56.017:62) : item=1 name=hello inode=799889 dev=08:01 mode=file,644 ouid=root ogid=root rdev=00:00 nametype=DELETE 
                    type=PATH msg=audit(07/20/2014 20:38:56.017:62) : item=0 name=/etc/apparmor inode=783766 dev=08:01 mode=dir,755 ouid=root ogid=root rdev=00:00 nametype=PARENT 
                    type=CWD msg=audit(07/20/2014 20:38:56.017:62) :  cwd=/etc/apparmor 
                    type=SYSCALL msg=audit(07/20/2014 20:38:56.017:62) : arch=i386 syscall=unlinkat success=yes exit=0 a0=ffffff9c a1=89eb8c0 a2=0 a3=0 items=2 ppid=17704 pid=17889 auid=root uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts1 ses=2 comm=rm exe=/bin/rm key=MAC-policy 
                    

                    也可以使用aureport來生成報告。

                    1.4.1 針對文件的審計

                    1, Leo Juranic的詳細的分析[]了異常的通配符威脅有多大,:

                    find / -path /proc -prune  -name "-*"
                    

                    2, 所謂的world-writable權限的文件是不太合理的,所以這種文件我們必須得提防:

                    find / -path /proc -prune -o -perm -2 ! -type l -ls
                    

                    3, 一個沒有owner的文件是存在潛在威脅的,因為你永遠也不知道未來某個時候她的

                    uid/gid成為了你的敵人:

                    find / -path /proc -prune -o -nouser -o -nogroup
                    

                    4, 作為"自主可控"的自由軟件用戶,你得知道你的生產環境中哪些用戶是可用的:

                    egrep -v '.*:\*|:\!' /etc/shadow | awk -F: '{print $1}'
                    

                    5, 你要刪除一個用戶前,應該先了解一些有哪些文件是他擁有的: ---||||---||||---||||---||||---||||---||||---||||---||||---||||---||||---||||---||||---||||---||||---||||---||||---||||---||||---||||---||||--x

                    find / -path /proc -prune -o -user account -ls
                    

                    然后,安全的刪除:

                    userdel -r account
                    

                    6, 如果不帶':x:'的用戶肯定是無法正常使用的:

                    grep -v ':x:' /etc/passwd
                    

                    7, /boot目錄權限下至少是644,甚至是600:

                    ls -l /boot
                    

                    (可選)

                    1, GNU/Linux的訪問控制列表(ACL)也是不錯的文件權限管理的途徑,獲得文件

                    ACL的信息:

                    getfacl file
                    

                    設置哪些用戶對哪些文件有什么樣的權限:

                    setfacl -m u:user:r file

                    0x02 內核安全基線


                    SYN cookies防護主要是為了防止SYN洪水攻擊,開啟設置為1:

                    net.ipv4.tcp_syncookies = 1
                    /proc/sys/net/ipv4/tcp_syncookies
                    

                    (可選),如果需要開啟SYNPROXY可以直接:

                    iptables -t raw -A PREROUTING -i eth0 -p tcp --dport 80 --syn -j NOTRACK
                    iptables -A INPUT -i eth0 -p tcp --dport 80 -m state UNTRACKED,INVALID \
                         -j SYNPROXY --sack-perm --timestamp --mss 1480 --wscale 7 --ecn
                    
                    echo 0 > /proc/sys/net/netfilter/nf_conntrack_tcp_loose
                    

                    注意:SYNPROXY是在3.13里加入的NETFILTER特性。

                    源路由通常可以用于在IP包的OPTION里設置途經的部分或者全部路由器,這個 特性可以用于網絡排錯和優化,比如traceroute,攻擊者也可以使用這個特性來

                    進行IP欺騙,關閉設置為0:

                    net.ipv4.conf.all.accept_source_route = 0
                    /proc/sys/net/ipv4/conf/all/accept_source_route
                    

                    ICMP重定向,正常用于選擇最優路徑,攻擊者可以利用開展中間人攻擊,關閉設

                    置為0:

                    net.ipv4.conf.all.accept_redirects = 0
                    /proc/sys/net/ipv4/conf/all/accept_redirects
                    

                    IP欺騙防護,啟動設置為1:

                    net.ipv4.conf.all.rp_filter = 1
                    /proc/sys/net/ipv4/conf/all/rp_filter
                    

                    忽略ICMP請求( PING),啟動設置為1:

                    net.ipv4.icmp_echo_ignore_all = 1
                    /proc/sys/net/ipv4/icmp_echo_ignore_all
                    

                    忽略ICMP廣播請求,啟動設置為1:

                    net.ipv4.icmp_echo_ignore_broadcasts = 1
                    /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
                    

                    錯誤消息防護,會警告你關于網絡中的ICMP異常,啟動設置為1:

                    net.ipv4.icmp_ignore_bogus_error_responses = 1
                    /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
                    

                    對特定packet(IP欺騙,源路由,重定向)進行審計,啟動設置為1:

                    /proc/sys/net/ipv4/conf/all/log_martians
                    net.ipv4.conf.all.log_martians = 1
                    

                    地址隨機化,啟動設置為2:

                    kernel.randomize_va_space=2
                    /proc/sys/kernel/randomize_va_space
                    

                    內核符號限制訪問,啟動設置為1:

                    kernel.kptr_restrict=1
                    /proc/sys/kernel/kptr_restrict
                    

                    類似CVE-2014-0196的exploit對于這一項就很難做到“通殺”;-)

                    內存映射最小地址,啟動設置為65536:

                    vm/mmap_min_addr=65536
                    /proc/sys/vm/mmap_min_addr
                    

                    Apparmor

                    安裝Apparmor和社區規則:

                    sudo apt-get install -y apparmor-profiles apparmor
                    

                    查看狀態是否運行正常:

                    sudo aa-status
                    

                    0x03 加固


                    安全基線是在防御已知的威脅,而加固則是側重于防御未知的威脅,加固的主要 目的是增加攻擊者的成本。

                    3.1 內核加固 - Grsecurity/PaX

                    GNU/Linux平臺從用戶空間到內核空間都有一系列的加固措施,但是,對于真正面 臨復雜安全環境,確實需要高級安全防護能力的機構,最極端的加固防御是: Grsecurity/PaX,對于注重完美的“老派( old school )”黑客社區而言,沒有 Grsecurity/PaX 的定制方案是不完美的 ,這里摘選幾段old school社區的調侃:

                    "The "better than none" point of view is actually a nice way to false sense of security for those who don't know better. We got better-than-none apparmor, selinux, tomoyo, some poorly maintained and crippled ports of grsec features or alikes, namespaces and containers, rootkit-friendly LSM, the dumb and useless kernel version of SSP, etc. What's the sum of all this shit for end users? False sense of security..."

                    "without Grsecurity/PaX, linux security is like monkey can never perform a regular masturbation cu'z lacking of giant pennis;-)"

                    作為個人完全贊同以上觀點,太多的better-than-none可以算是"甜點",用戶使 用后會覺得自high的很爽,但是到了夜幕降臨的時候,用戶還是很難入睡,因為 "痛點"依然在那里,在安全領域,"甜點"就是"安全感",安全感絕對不等同于安 全。

                    Anyway,對于商業客戶而言,是否對Grsecurity/PaX定制是一種選擇。

                    安裝新的帶Grsecurity/PaX補丁的內核,以3.14.1為例,先下載原生內核:

                    https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.14.1.tar.xz

                    下載Grsecurity/PaX補丁: https://github.com/citypw/citypw-SCFE/raw/master/security/apparmor_test/grsecurity-3.0-3.14.11-201407072045.patch

                    解壓內核然后打補丁:

                    Patch the kernel with grsecurity:
                    xz -d linux-3.14.1.tar.xz
                    tar xvf linux-3.14.1.tar
                    cd linux-3.14.1/
                    patch -p1 < ../grsecurity-3.0-3.14.3-201405121814.patch
                    

                    你可以在"make menuconfig"里自己定制符合你口味的內核,也可以使用我測試用 的內核config文件: https://raw.githubusercontent.com/citypw/citypw-SCFE/master/security/apparmor_test/debian-7.4-linux-3.14.1-grsec.config

                    編譯內核(-jx, x通常==你的CPU核數+1):

                    make -j7 deb-pkg
                    

                    安裝編譯后的內核:

                    dpkg -i ../*.deb
                    

                    現在內核的部分結束,關于RBAC規則可以使用用戶態工具gradm的Learning Mode 來實現,但不在本文的討論范疇。

                    3.2 PHP加固

                    1, PHP是常用的WEB開發語言,在WEB生產環境部署的過程中,目錄和文件的權限是需 要關注的,通常除了少數用途的目錄(比如上傳)外,都應該把寫入權限禁用:


                    find -type f -name \*.php -exec chmod 444 {} \;
                    find -type d -exec chmod 555 {} \;
                    

                    2, 開啟 php 的安全模式,禁用 php 不安全的函數等加固,修改 php 配置文件 /etc/php5/apache2/php.ini :


                    // 設置模式為安全模式,此值直接影響 disable_functions 的命令是否生效; [SQL]

                    ; http://php.net/sql.safe-mode
                    
                    sql.safe_mode = On
                    

                    // 禁用不安全的函數

                    disable_functions = system, show_source, symlink, exec, dl, shell_exec,
                    passthru, phpinfo, escapeshellarg, escapeshellcmd
                    

                    // 避免暴露 php 信息

                    expose_php = Off
                    

                    // 關閉錯誤信息提示

                    display_errors = Off
                    

                    // 不允許調用 dl

                    enable_dl = Off
                    

                    // 避免遠程調用文件

                    allow_url_include = Off
                    

                    0x04 Reference


                    [1] 開源閉源項目代碼質量對比 http://www.solidot.org/story?sid=39173

                    [2] Back To The Future: Unix Wildcards Gone Wild http://www.defensecode.com/public/DefenseCode_Unix_WildCards_Gone_Wild.txt

                    [3] SYNPROXY:廉價的抗DoS攻擊方案 www.solidot.org/story?sid=38791

                    [4] INTERNET PROTOCOL http://tools.ietf.org/html/rfc791

                    [5] A simple TCP spoofing attack http://www.citi.umich.edu/u/provos/papers/secnet-spoof.txt

                    [6] ICMP Attacks Illustrated http://www.sans.org/reading-room/whitepapers/threats/icmp-attacks-illustrated-477

                    [7] SUSE Linux Enterprise Server 11 SP3 - Security and Hardening https://www.suse.com/documentation/sles11/singlehtml/book_hardening/book_hardening.html

                    [8] Securing Debian Manual https://www.debian.org/doc/manuals/securing-debian-howto/

                    [9] A Brief Introduction to auditd http://security.blogoverflow.com/2013/01/a-brief-introduction-to-auditd/

                    [10] Apparmor RBAC http://wiki.apparmor.net/index.php/Pam_apparmor_example

                    [11] Hardening PHP from php.ini http://www.madirish.net/199

                    [12] CVE-2014-0196 exploit http://bugfuzz.com/stuff/cve-2014-0196-md.c

                      <pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
                      <pre id="vvttv"></pre>

                        <p id="vvttv"></p>

                            <p id="vvttv"></p>

                                  <p id="vvttv"></p>

                                  <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                                    <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                                      <p id="vvttv"></p>

                                      这里只有精品视频