作者 主題: apache2安全實做筆記 FC3 and RHEL4 Part I  (閱讀 7381 次)

0 會員 與 1 訪客 正在閱讀本文。

fz150n

  • 憂鬱的高中生
  • ***
  • 文章數: 111
    • 檢視個人資料
前言
   入侵事件時有所聞,對外提供網路服務的主機,大部分都是容易遭受攻擊的,差別在於系統管理員
   是否勤於更新補強,以及是否準備足夠的過濾機制及監控方法來偵測主機。
   
   ~只要接上了Internet,就沒有完全的安全性可言~  By Anonymous
   
   Apache本身的安全性,其實應該算是很成熟的,但被入侵的主機,卻往往都是附屬的應用程式,
   或許對於指令檢查的不完全,或許是程式撰寫的疏忽,而讓系統開了門,變成入侵者的測試天堂。
   
   舉凡XSS(Crxoss Site Scripting or CSS), File Inclusion, SQL Injection,如果稍微注意一下
   資安通報,就會發現這些漏洞不斷被發掘出來,為了被承認,許多甚至還附上證明,這時,一些
   沒創意的或比較懶的入侵者,看到通報之後,或許剛入門,或許技癢,偏偏剛好要入侵的系統的
   管理員出國了,或心情不好,或者忙結婚,等到重新想登入系統的時候,要不就是首頁被換了,
   要不,搞不好還有家歸不得。
   
   是的,有一次因為不小心沒有把客戶主機的root密碼改掉,一個晚上,應該只有幾小時,整個
   系統被搞翻天,還好留了一個已登入的tty,但是終究逃不掉重灌的命運。

   空具RHCE的頭銜,小弟每每面對系統一堆不明的訊息時,卻不知從何做起,跑跑Nessus, Snort,
   AWSTATS,偶而看一下logwatch, 常常看著Bugtraq的說明訊息,卻也只能茫茫然...
   
   於是我定了一堆安全通報,逛一逛駭客網站,看看駭客們的影片傑作,詳讀每一份安全白皮書,
   強迫自己進入資訊安全的知識領域,畢竟有了開始就不會太晚。
   
   我只是newbie,別想太多,也別懷疑我會想要進入別人的系統,因為我根本沒那個能力,
   當一個駭客得要有深厚的TCP/IP為基礎,以及對程式語言的了解,比如perl, C, ASM等等,
   以上提的這些,我通通都沒有,呵呵~
   
   (如果你現在剛好讀著這篇文章,那表示你可能不是西班牙語系的駭客,那應該也不會是羅馬尼亞來的,
   如果你又剛好熟這些程式語言,那請你一定要出來救救大家,開個論壇或辦個教之類的,我一定先報名。)
   
   但是,每天注意這些漏洞,真是一件辛苦的事情,再怎麼補,也還是有被入侵的可能,所以,
   小弟認為應該從健全體質開始做起,重新建制一個更安全的網路服務環境,即使被入侵了,
   入侵者能做的破壞畢竟有限,配合適當的監控及備份回覆措施,系統管理員應該可以多做一些
   其他的事,或學更多更深一點的技術。
   
   講到體質,我想這應該是為什麼現在還有很多人衷情於FreeBSD以及apache 1.X的原因吧?

   CHROOT是一個蠻厲害的技術,詳細內容我也不太了解,就好比loop常常都會用,而且還很愛用,
   但是我也一樣不知道它的詳細技術內容,總之,chroot可以提供系統安全的層次,但決不是杜絕,
   系統安全不會因為把所有重要服務都放到監獄裡就能降到零,風險永遠都存在...
   
   這篇文章只針對Apache Web Server,主要參考的是SecurityFocus一系列的文章而實做出來的,
   我想,專家都這樣建議了,那像我這樣肉腳的管理員也只能唯唯諾諾的照作,
   尤其是被入侵了這麼多次之後,呵呵~
   
   這篇文章希望拋磚引玉,引起大家對資訊安全的重視,別再讓我們辛苦建制的主機,變成入侵者的天堂。
   
   內容如有錯誤,希望前輩及各位網友不吝指教,謝謝!  
   fz150n@hotmail.com
   
測試環境:
   Intel P4 and Celeron
   RedHat Fedora Core 3 and RedHat Enterprise 4
   httpd-2.2.2
   PHP-5.1.4
   MySQL-4.1.20
   ModSecurity-1.9.4   

主要安裝步驟:

   1. mod_security -> 2. httpd -> 3. mysql(binary) -> 4. zlib -> 5. PHP -> 6. chroot -> 7. copy files -> 8. configure -> 9. finish



我們先假設工作的目錄在 /tmp 底下

1. mod_security

   描述:
   這個模組可以有效防止XSS(or CSS)及SQL Injection的攻擊(當然也包含防止盜連),搭配官方或適當的規則,可大幅提昇Apahce的安全性,
   並且也有獨立的稽核及除錯紀錄,方便管理員追蹤。(但是不知道為什麼沒有被Apache基金會包進去?)
   
   因為我們要讓mod_security跟httpd整合編譯,所以先下載到適當位置就好。
      
      
代碼: [選擇]
[ root@fz150n ] wget http://www.modsecurity.org/download/modsecurity-apache_1.9.4.tar.gz
[ root@fz150n ] wget http://www.modsecurity.org/download/modsecurity-rules-current.tar.gz


2. httpd-2.2.2
   描述:
   我們要手動編譯,把有些內定開啟的模組關閉,並同時將mod_security一起編譯進去。
   參考:http://httpd.apache.org/
      
      
代碼: [選擇]
[root@fz150n ] wget http://apache.cdpa.nsysu.edu.tw/httpd/httpd-2.2.2.tar.gz
[root@fz150n ] tar xzvf httpd-2.2.2.tar.gz
[root@fz150n ] mkdir -p httpd-2.2.2/modules/security
[root@fz150n ] tar xzvf modsecurity-apache_1.9.4.tar.gz
[root@fz150n ] cd modsecurity-apache_1.9.4/apache2/
[root@fz150n ] cp mod_security.c Makefile.in config.m4 /tmp/httpd-2.2.2/modules/security/
[root@fz150n ] cd /tmp/httpd-2.2.2
[root@fz150n ] ./buildconf

       (這個指令會跑一陣子,讓apache編譯程式搜尋到你剛剛建立的modules/security,並且建立設定檔)

      
代碼: [選擇]
[root@fz150n ] ./configure
--prefix=/usr/local/apache2 --with-mpm=prefork --disable-charset-lite
--disable-include --disable-env --disable-setenvif --disable-status
--disable-autoindex --disable-asis --disable-cgi --disable-negotiation
--disable-imap --disable-actions --disable-userdir --disable-alias
--enable-so --enable-security --enable-vhost-alias

            (以上請自行參酌開啟或關閉,我是照原作的設定下去跑的,不過我有開so,
            因我只知道用libphp5.so,呵~不知有沒有人可以提供可以完全把so關掉的方法?cgi ???
      
3. mysql-binary

   描述:
   編譯php時需要用的,所以要比PHP早安裝,但請特別注意,MySQL官方也是建議您使用Binary套件,
   也就是你下載之後的MySQL 套件,只要是適合你的系統版本,就可以直接執行,而不需要任何編譯的動作。
   所以一定要找到適合您的系統的套件,一般只要選擇standard的套件,再看看你的glibc是那一版的。
   (一開始的時候用MySQL 5,但是花了我太多時間,卡在一個問題而裝不起來,所以後來才改用4.1.20)

   下載網址:http://dev.mysql.com/downloads/mysql/4.1.html
   (這裡的範例是RedHat Enterprise 4 on Celeron 500  沒辦法,沒機器了~湊合著點)

      
代碼: [選擇]
[root@fz150n ] http://dev.mysql.com/get/Downloads/MySQL-4.1/mysql-max-4.1.20-pc-linux-gnu-i686-icc-glibc23.tar.gz
[root@fz150n ] tar xzvf mysql-standard-4.1.20-pc-linux-gnu-i686-glibc23.tar.gz
[root@fz150n ] mv mysql-standard-4.1.20-pc-linux-gnu-i686-glibc23 /usr/local/mysql/
      
       是的,目前你只需要把它解壓縮,然後搬到/usr/local就好了。
 
4. zlib
   描述:
   我想我的系統一定有zlib,也許是版本太舊了,但是既然PHP5跟我要求,那只好去抓新版的回來裝了:

      
代碼: [選擇]
[root@fz150n ] wget http://www.zlib.net/zlib-1.2.3.tar.gz
[root@fz150n ] tar xzvf zlib-1.2.3.tar.gz
[root@fz150n ] cd zlib-1.2.3
[root@fz150n ] ./configure --prefix=/usr/local
[root@fz150n ] make ; make install

   這個步驟應該不會有問題,如果有的話,請詳讀README或INSTALL,或請將錯誤訊息丟給google處理。

5. php-5.1.4
   描述:
   最後才編譯PHP,說真的我覺得蠻難裝的,有些套件其實我也不確定是否可以不要,萬一以後想用GD的話怎麼辦呢?
   只好想說,先讓基本的功能都先跑起來最重要。

   在這裡編譯完之後,libphp5.so會自己放到httpd的modules目錄底下,並且增加一行LoadModule的設定到httpd.conf,
   但是你需要手動加一行   AddType application/x-httpd-php .php  ,不急,反正還要一下子,等會到第8個步驟再一起設定。

      
代碼: [選擇]
[root@fz150n ] wget ftp://tw.php.net/php/distributions/php-5.1.4.tar.gz
[root@fz150n ] tar xzvf php-5.1.4.tar.gz
[root@fz150n ] cd php-5.1.4
[root@fz150n ] ./configure --prefix=/usr/local
--with-mysql=/usr/local/mysql
--with-apxs2=/usr/local/apache2/bin/apxs
--enable-mbstring --with-zlib-dir=/usr/local

       (從上面的設定看來,我們一定先把 apache 及 mysql 裝起來)

      
代碼: [選擇]
[fz150n@Linux php-5.1.4]# make install
Installing PHP SAPI module:       apache2handler
/usr/local/apache2/build/instdso.sh SH_LIBTOOL='/usr/local/apache2/build/libtool' libphp5.la /usr/local/apache2/modules
/usr/local/apache2/build/libtool --mode=install cp libphp5.la /usr/local/apache2/modules/
cp .libs/libphp5.so /usr/local/apache2/modules/libphp5.so
cp .libs/libphp5.lai /usr/local/apache2/modules/libphp5.la
libtool: install: warning: remember to run `libtool --finish /root/php-5.1.4/libs'
chmod 755 /usr/local/apache2/modules/libphp5.so
[activating module `php5' in /usr/local/apache2/conf/httpd.conf]
Installing PHP CLI binary:        /usr/local/bin/
Installing PHP CLI man page:      /usr/local/man/man1/
Installing build environment:     /usr/local/lib/php/build/
Installing header files:          /usr/local/include/php/
Installing helper programs:       /usr/local/bin/
  program: phpize
  program: php-config
Installing man pages:             /usr/local/man/man1/
  page: phpize.1
  page: php-config.1
Installing PEAR environment:      /usr/local/lib/php/
[PEAR] Archive_Tar    - installed: 1.3.1
[PEAR] Console_Getopt - installed: 1.2
pear/PEAR can optionally use package "pear/XML_RPC" (version >= 1.4.0)
[PEAR] PEAR           - installed: 1.4.9
Wrote PEAR system config file at: /usr/local/etc/pear.conf
You may want to add: /usr/local/lib/php to your php.ini include_path
Installing PDO headers:          /usr/local/include/php/ext/pdo/

      (為了方便往後的設定,建議您將這個畫面的資料拷貝下來。)
      
      依照安裝程式的建議,我們再跑一次(雖然我也不知道這樣是否需要,呵呵):
      [root@fz150n ] ./libtool --finish /root/php-5.1.4/libs
      
       本來我也是想照原文把大部分的模組關掉,但老是編不起來,加上對PHP又沒有很熟,後來只好退而求其次。
       我把我編譯好的模組列出來:

      
代碼: [選擇]
bash-3.00# php -m
[PHP Modules]
ctype
date
dom
hash
iconv
libxml
mbstring
mysql
pcre
PDO
posix
Reflection
session
SimpleXML
SPL
SQLite
standard
tokenizer
xml
xmlreader
xmlwriter
zlib
      
      看起來好像還是太多了,不太符合安全標準,有空再來瘦身一下。


      到這裡為止,我們需要的軟體套件已經具備好了,接下來就準備建立chroot的環境了。

      在開始複製之前,記得一件事情,就是要善用  ldd  (print shared library dependencies)這個工具,
      (當然你也一定要熟悉tail工具的用法,常用的還是 tail -f /xxx/yyy/zzz.log )

      因為我們要從一個完全沒有Library程式庫的環境之下,來讓這些工具跑起來,也只有藉由這樣的工具,
      才讓你可以正確的建置你需要的chroot環境。

damon

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 4227
    • 檢視個人資料
    • http://blog.damon.tw/
apache2安全實做筆記 FC3 and RHEL4 Part I
« 回覆 #1 於: 2006-06-02 22:08 »
rhce沒有教怎麼用up2date嗎? 這樣搞,以後誰接手誰倒楣....

Darkhero

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3728
  • 性別: 男
    • 檢視個人資料
    • ㄚ凱隨手紀
apache2安全實做筆記 FC3 and RHEL4 Part I
« 回覆 #2 於: 2006-06-02 23:02 »
先給你鼓掌!能夠這麼完整且有系統的建立了一個 chroot 環境,更能寫成教學文件,是一件非常辛苦又需要細心的事情。

不過個人覺得,這樣的作法大過於複雜,將來要更新維護會很不方便。

與其搞一個這麼複雜的 chroot 環境,倒不如使用util-linux , xen-linux 建立虛擬的環境。獨立運作相關的服務。

還有就是研讀 SELinux 的相關文件,以目前來說 SELinux 可以提供絕大部份的保護~

關於 SELinux 你可以參考一下這些資料:
http://blog.yam.com/candyz/archives/1542977.html
http://blog.yam.com/candyz/archives/1549062.html
http://blog.yam.com/candyz/archives/1550170.html
http://blog.yam.com/candyz/archives/1550225.html
http://blog.yam.com/candyz/archives/1566581.html
希望我們的討論是為了把問題解決,而不是爭論誰對誰錯.
『灌水才是重點,發文只是順便』
『我寧可讓不會釣魚的工程師餓死,也不想讓會餓死的工程師去攪沉公司....』
Blog: http://blog.darkhero.net/
秘密基地: http://www.darkhero.net/comic/
目前服務的網站: http://www.libook.com.tw/