140 likes | 266 Views
Sendmail Security. Shien-Chang Ko gis92555@cis.nctu.edu.tw 交通大學資訊科學系 系計算中心. Outline. 安全漏洞的來源 SMTP 探測器 組態檔 存取模式 Aliases 檔 & 偽造的郵件 其他 使用 OpenSSL 安全連線 & Cyrus-SASL 身分認證 Reference. 安全漏洞的來源. Sendmail 必須以 suid root 的方式執行 錯誤的組態檔設定 執行遞送代理程式 把資料寫到一般檔案中. SMTP 探測器.
E N D
Sendmail Security Shien-Chang Ko gis92555@cis.nctu.edu.tw 交通大學資訊科學系 系計算中心
Outline • 安全漏洞的來源 • SMTP探測器 • 組態檔 • 存取模式 • Aliases檔 & 偽造的郵件 • 其他 • 使用OpenSSL安全連線 & Cyrus-SASL身分認證 • Reference
安全漏洞的來源 • Sendmail 必須以 suid root 的方式執行 • 錯誤的組態檔設定 • 執行遞送代理程式 • 把資料寫到一般檔案中
SMTP探測器 • 危險1 – 編譯時定義了SMTPDEBUG, 可使用debug, showq指令 • 解決 – 不定義 SMTPDEBUG • 危險2 – vrfy 和 expn 指令vrfy user: 檢查是否有該使用者expn alias: 展開 alias 名單 • 解決 – sendmail.cf O PrivacyOptions=novrfy,noexpn
組態檔 • 危險3 – F命令FX/tmp/macro.txtFX|/tmp/macro sendmail.cf /tmp/.sh 下指令 /usr/sbin/sendmail –bt < /dev/null • 解決 – 組態檔必須為root擁有, 只有root才能寫入 FX|/tmp/.sh O DefaultUser=0:0 #!/bin/shcp /bin/sh /tmp/.shell chmod u+s /tmp/.shell BOM
組態檔 (cont) • 危險4 -- 遞送代理程式 P= 等式 原 sendmail.cf 修改的 sendmail.cf 下指令 /usr/sbin/sendmail q3man • 解決 – 組態檔需為root擁有, 只有root可以寫入-- P=等式不要使用相對路徑 Mlocal, P=/bin/mail, F=rlsDFMmnP, S=10, R=20, A=mail –d $u Mlocal, P=/tmp/mail, U=0, F=SrlsDFMmnP, S=10, R=20, A=mail –d $u BOM
組態檔 (cont) • 危險5 -- 統計資料檔 sendmail.cf % cd /usr/tmp % ln –s vmunix sendmail.st 解決 – sendmail 所要寫入個所有檔案只能有root可以寫入,例如 StateFile, aliases, 檔案所在的目錄也只能有root寫入 OS/usr/tmp/sendmail.st BOM
存取模式 • 危險6 -- :include: 的存取模式 sendmail 在需要時會改變身分成為其他使用者 aliases -rw-rw-r-- 2 bin prog 704 Sep 21 14:46 /usr/local/lists/proglist prog group 裡的user 在 proglist 檔中加入 /tmp/x.sh /tmp/sh 的擁有者為 bin, 任何人都可成為 bin Newprogs: :include:/usr/locallists/proglist |/tmp/x.sh #!/bin/sh cp /bin/sh /tmp/sh chmod u+s /tmp/sh cat - > /dev/null exit 0
存取模式 (cont) • drwxr-sr-x bin 2500 Sep 22 18:18 /etc-rw-r- -r- - root 8199 Aug 25 07:54 /etc/sendmail.cf 下指令 mv /etc/sendmail.cf /etc/… mv /tmp/sendmail.cf /etc/sendmail.cf • 解決 -- root 所擁有的檔案, 其所在目錄及路徑也必須為root所擁有-- 郵寄名單所在的目錄及路徑只有 root 可寫入, 郵寄名單本身只有擁有者可以寫入-- 當郵寄名單為 root 所擁有, sendmail會改變身分為 DefaultUser, DefaultUser 絕對不能設定成 root • 危險7 – 使用者的 ~/.forward 檔 (攻擊方式和危險6一樣) BOM
aliases & 偽造郵件 • 保護 aliases 檔及其 database 檔 aliases.db/usr/sbin/sendmail –oA./aliases -bi • 保護序列目錄序列目錄需為root擁有, 只有root能寫入 • 防止SMTP偽造郵件教育使用者, 收到可疑郵件時不要馬上相信
其他 • 設定trusted user (Ctroot daemon)/usr/sbin/sendmail –f i_am_swindler未被信任的使用者使用 –f 開關將會在郵件裡加入 X-Authentication-Warning標頭 • 使用 smrsh shellMprog P=/usr/local/etc/smrsh, …..Mlocal P=/bin/mail, …..smrsh 會移除要執行的程式’的路徑, 改由到 /usr/adm/sm.bin 去找尋程式, smrsh 也會檔掉一些有可疑字元的指令行 (;)|”cp /bin/sh /home/george/.x ; chmod u+s /home/george/.x”
使用OpenSSL安全連線 & Cyrus-SASL身分認證 • 假設已經取得server 端的 key-pair, 存放於 /etc/mail/cert/mykey.pem server 端的 CA, 存放於 /etc/mail/cert/mycert.pem 公正單位的 CA, 存放於 /etc/mail/cert/cacert.pem • FreeBSD已內建OpenSSL • 安裝Cyrus-SASL程式庫cd /usr/ports/security/cyrus-sasl make install clean • /etc/make.conf • 重新make sendmail (cd /usr/src/usr.sbin/sendmail;make;make install) SENDMAIL_CFLAGS=-I/usr/local/include/sasl1 -DSASL SENDMAIL_LDFLAGS=-L/usr/local/lib SENDMAIL_LDADD=-lsasl
使用OpenSSL安全連線 & Cyrus-SASL身分認證 (cont) • 設定 sendmail 的安全連線與身分認證功能 /etc/mail/your_hostname.mc • 建立新的 sendmail 控制檔案(cf file) cd /etc/mail ; make cf ; make install • 重跑 sendmail dnl The following lines are used to enable the STARTTLS function define(`CERT_DIR', `/etc/mail/cert')dnl define(`confCACERT_PATH', `CERT_DIR')dnl define(`confCACERT', `CERT_DIR/cacert.pem')dnl define(`confSERVER_CERT', `CERT_DIR/mycert.pem')dnl define(`confSERVER_KEY', `CERT_DIR/mykey.pem')dnl define(`confCLIENT_CERT', `CERT_DIR/mycert.pem')dnl define(`confCLIENT_KEY', `CERT_DIR/mykey.pem')dnl dnl The following lines are used to enable CYRUS-SASL function TRUST_AUTH_MECH(`LOGIN PLAIN')dnl define(`confAUTH_MECHANISMS', `LOGIN PLAIN')dnl
Reference • Sendmail安裝管理 chapter 22Bryan Costales with Eric Allman, O’REILLY • 張毓麟先生的文件集http://netlab.kh.edu.tw/document/使用 TLS/SSL 讓你的 sendmail 更安全 • 如何製作 SSL X.509 憑證 http://www.imacat.idv.tw/tech/sslcerts.html#smtp