安全基線1、網(wǎng)絡(luò)安全基線采用白名單制做好網(wǎng)絡(luò)層面的ACL,只對(duì)外網(wǎng)開(kāi)放必需的端口(如80或443等); 同一網(wǎng)段的服務(wù)器要與其他服務(wù)器劃分在不同的Vlan中,防止被ARP欺騙; 生產(chǎn)環(huán)境網(wǎng)絡(luò)必須與辦公網(wǎng)絡(luò)隔離; 只允許出口IP和堡壘機(jī)連接服務(wù)器的管理端口
2、服務(wù)器安全基線2.1 Linux服務(wù)器安全基線操作系統(tǒng)最小化安裝,只安裝業(yè)務(wù)所必需的服務(wù); 服務(wù)器禁止使用弱口令,禁止所有服務(wù)器使用相同的密碼; 使用iptables做好服務(wù)器層面的ACL,只允許出口IP連接ssh,對(duì)外網(wǎng)開(kāi)放必需的端口(80或443等); 禁止允許root用戶直接登錄SSH,安全加固方法:PermitRootLogin no StrictModes yes 使用SSH協(xié)議版本2,安全加固方法為:Protocol 2,1 修改為 Protocol 2 Mysql、Redis、Memcache、Mongodb等應(yīng)用程序只允許監(jiān)聽(tīng)在內(nèi)網(wǎng)網(wǎng)卡上。
2.2 Windows服務(wù)器安全基線使用正版、干凈的安裝盤(pán)安裝操作系統(tǒng); 設(shè)置強(qiáng)壯的口令,禁止所有服務(wù)器使用相同的密碼; 配置IPSEC,只允許出口IP訪問(wèn)遠(yuǎn)程桌面,對(duì)外網(wǎng)開(kāi)放必需的端口(80或443等); 正式上線前確保打全了所有補(bǔ)丁,設(shè)置可以自動(dòng)安裝補(bǔ)丁但不自動(dòng)重啟; 安裝一款殺毒程序并可以自動(dòng)更新病毒庫(kù); 禁止安裝與業(yè)務(wù)無(wú)關(guān)的第三方軟件。
3、WEB服務(wù)器安全基線3.1 Apache服務(wù)器安全基線隱藏Apache的版本及操作系統(tǒng)信息,防止敏感信息,安全加固方法:ServerSignature Off ServerTokens Prod 禁止目錄枚舉和禁止使用符號(hào)鏈接跨越DocumentRoot,安全加固方法:Options -Indexes –FollowSymLinks 禁止用戶使用.htaccess文件覆蓋Options配置項(xiàng),安全加固方法:AllowOverride None 禁止訪問(wèn)站點(diǎn)目錄之外的文件,安全加固方法: Order Deny, Allow deny from all
禁用不需要的模塊,保持最小化原則,安全加固方法為注釋掉以下一些不需要的模塊: mod_imap, mod_include, mod_info, mod_userdir, mod_autoindex等 禁止Apache以直接以Root用戶運(yùn)行,應(yīng)為apache創(chuàng)建獨(dú)立的運(yùn)行賬戶,如www:User www Group www
為管理后臺(tái)等重要目錄設(shè)定ACL,安全加固方法如下: Order Deny,Allow Deny from all Allow from 出口IP
去除用戶上傳目錄的腳本執(zhí)行權(quán)限,防止攻擊者寫(xiě)入webshell,安全加固方法:
Deny from all
禁止訪問(wèn).git、.git目錄及.sql格式的文件,防止源碼或數(shù)據(jù)庫(kù)SQL文件泄漏,安全加固方法:
Deny from all
3.1 Nginx服務(wù)器安全基線防止操作系統(tǒng)和Nginx版本泄漏,安全加固方法: server_tokens off;
修改Nginx的Banner信息,修改方法為將 src/http/ngx_http_header_filter_module.c文件中的以下2行:static char ngx_http_server_string[] = "Server: nginx" CRLF; static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF; 修改為:static char ngx_http_server_string[] = "Server: Xiaomi Web Server" CRLF; static char ngx_http_server_full_string[] = "Server: Xiaomi Security Team is hiring" CRLF;
為站點(diǎn)的管理后臺(tái)目錄設(shè)定ACL,安全加固方法為:location /admin/ { \## allow anyone in 192.168.1.1 allow 192.168.1.1; \## drop rest of the world deny all; }
去除用戶上傳目錄的腳本執(zhí)行權(quán)限,防止用戶寫(xiě)入webshell,安全加固方法為:location ~ /upload/.*\.(php|php5)?$ { deny all; }
禁止不必要的http方法,以下的配置只保留了GET、POST和HEAD方法:\## Only allow these request methods ## if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 444; }
禁止訪問(wèn).svn/.git目錄及.sql格式的文件,防止代碼或數(shù)據(jù)庫(kù)文件泄漏,安全加固方法:location ~ \.(/svn/|/git/|sql)?$ { deny all; }
3.2 PHP配置安全規(guī)范關(guān)閉暴露php版本信息:expose_php=Off
關(guān)閉可以遠(yuǎn)程代碼執(zhí)行的相應(yīng)參數(shù):allow_url_fopen=Off allow_url_include=Off
禁用危險(xiǎn)函數(shù):disable_functions=exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
錯(cuò)誤的信息處理:
display_errors=Off log_errors=On error_log=/var/log/httpd/php_scripts_error.log #便于分析 使用open_basedir限制php對(duì)文件的訪問(wèn)權(quán);open_basedir="/var/www/html/; 為php創(chuàng)建單獨(dú)的用戶和用戶組;
為php用戶創(chuàng)建單獨(dú)的用戶和用戶組,不可以直接以root用戶身份執(zhí)行php程序。
4、 常用的應(yīng)用程序安全基線4.1 Mysql安全基線Mysql端口禁止監(jiān)聽(tīng)在外網(wǎng)網(wǎng)卡上;
禁止使用弱口令并刪除匿名賬戶;
禁止使用root用戶啟動(dòng)mysql;
禁止除了root和mysql啟動(dòng)用戶之外的其他用戶對(duì)mysql的數(shù)據(jù)目錄有讀寫(xiě)權(quán)限;
每個(gè)mysql數(shù)據(jù)庫(kù)對(duì)應(yīng)一個(gè)mysql用戶,禁止mysql用戶可以訪問(wèn)與之無(wú)關(guān)的數(shù)據(jù)庫(kù);
嚴(yán)格遵循數(shù)據(jù)與代碼分離的原則,禁止WEB服務(wù)與mysql運(yùn)行于同一臺(tái)服務(wù)器。
4.2. Sql server 2008安全基線限制可以訪問(wèn)數(shù)據(jù)庫(kù)的IP,采用白名單機(jī)制,只允許信任的IP連接;
禁止將數(shù)據(jù)庫(kù)端口監(jiān)聽(tīng)在外網(wǎng)網(wǎng)卡中;
修改日志審核策略, 將登錄審核修改為“開(kāi)啟登錄成功和失敗的日志”;
禁止使用弱口令;
每個(gè)數(shù)據(jù)庫(kù)一個(gè)用戶,權(quán)限為PUBLIC,禁止用戶可以訪問(wèn)其他不必需的數(shù)據(jù)庫(kù);
使用NETWORK SERVICE賬戶來(lái)啟動(dòng)數(shù)據(jù)庫(kù);
嚴(yán)格遵循數(shù)據(jù)與代碼分離的原則,禁止數(shù)據(jù)庫(kù)與WEB服務(wù)使用同一臺(tái)服務(wù)器;
禁用以下高危的存儲(chǔ)過(guò)程:xp_cmdshell xp_delete_file xp_regread xp_regwrite xp_dirtree
4.3 Oracle安全基線禁止監(jiān)聽(tīng)在外網(wǎng)網(wǎng)卡上;
利用iptables和oracle的監(jiān)聽(tīng)器設(shè)置ACL,安全加固方法: tcp.validnode_checking = yes \#允許訪問(wèn)的ip tcp.invited_nodes = (ip1,ip2…) \#不允許訪問(wèn)的ip tcp.excluded_nodes=(ip1,ip2,……)
關(guān)閉不必要的服務(wù),只保留OracleServiceORCL和OracleOraDb11g_home1TNSListener; 禁止使用弱口令,建議鎖定DBSNMP和SYSMAN用戶;
禁止超級(jí)管理員遠(yuǎn)程登錄,安全加固方法:
4.4 Redis安全基線禁止監(jiān)聽(tīng)在外網(wǎng)網(wǎng)卡上;
為Redis設(shè)置強(qiáng)壯的口令,requirepass yourpassword;
禁止以Root權(quán)限啟動(dòng)redis;
禁用以下危險(xiǎn)指令:
rename-command FLUSHALL;rename-command FLUSHDB;rename-command CONFIG 4.5 Mongdb安全基線禁止監(jiān)聽(tīng)在外網(wǎng)網(wǎng)卡上;
為Mongodb設(shè)置強(qiáng)壯的口令,啟動(dòng)時(shí)加上--auth參數(shù);
禁用HTTP接口,安全加固方法為:
nohttpinterface = true 禁用rest接口,該接口不支持安全認(rèn)證支制,安全加固方法為:
rest = false 利用iptables設(shè)置ACL,只允許信任的IP連接。
4.6. Memcache安全基線禁止以root權(quán)限啟動(dòng);
禁止監(jiān)聽(tīng)到外網(wǎng)網(wǎng)卡上;
利用iptables做好ACL,只允許必需的服務(wù)器連接。
4.7. Rsync安全基線禁止以root用戶權(quán)限啟動(dòng);
設(shè)置允許連接的IP列表,安全加固方法:
設(shè)置訪問(wèn)口令,安全加固方法為:
利用iptables設(shè)置ACL,只對(duì)信任的IP開(kāi)放873端口,安全加固方法如下:
iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT 排除.svn和.git目錄,防止客戶端上傳后導(dǎo)致源碼泄漏,安全加固方法:exclude = .svn/ .git/
5、 WEB應(yīng)用安全規(guī)范5.1. 認(rèn)證安全OAuth 認(rèn)證安全
SSO 認(rèn)證安全
5.2. 防御XSS在html屬性中的輸出,使用htmlencode進(jìn)行處理,不過(guò)更為保險(xiǎn)的做法是:除了字母和數(shù)字之外,其他所有的特殊字符都編碼為htmlentities;
|