본문으로 바로가기

[펌] 리눅스 서버 체크

category IT소식/IT 공부 2016. 1. 13. 16:19

1. SUID 점검하기.(root 소유의 SetUID및 SetGID 파일들 점검 

#find / -user root -perm -4000 -print (SetUID) 

#find / -user root -perm -2000 -print (SetGID) 

#find / -user root -perm -4000 -print -xdev 


2. 파티션별 디스크사용량 점검 

#df -h 


3. 파일무결성 점검. 

- tripwire 설치 수 실행 


4. 백도어 설치여부 점검.(/dev 체크 및 rootkit 점검) 

#find /dev -type f -exec ls -l {} \; 

#./chkrootkit 


5. 현재 열려진 포트 및 응답가능한 포트 점검. 


#netstat -atp | grep LISTEN 

(사용 프로토콜 : TCP인가? 또는 UDP인가? 

사용중인 포트번호 

서버와 연결된 IP 및 도메인명 

생성 PID 

서비스중인 프로세스명 

현재 응답가능상태인가? 

#lsof | grep LISTEN 

(현재 서비스 중인 프로세스명(데몬명) 

현재 생성중인 PID번호. 

현재 서비스중인 프로세스의 소유자 

프로토콜 버전 : Ipv4 또는 Ipv6 

TCP 또는 UDP의 여부 

응답가능 상태인가? 


6. 실생중인 프로세스 및 데몬점검.(프로세스의 생성관계) 


#pstree 


7. 시스템 운용상황 점검. 


#top -d2 


8. 백업점검. 


9. 스팸메일 점검.(메일큐 디렉토리 점검) 


#cd /var/spool/mqueue (동일한 날짜, 동일한 사이즈를 가진 다수 파일구분) 


10. Core 점검. 


#find / -name core -exec ls -l {} \; 


서버내에 긴급한 이상이 발생하였을 경우나 시스템의 정확한 분석을 위해 

서버의 메모리 상태를 순간적으로 dump 받는 경우의 파일 



11. 파일용량 점검 


#repquota -av -ag 

#df -h 


12. 최근 서버 접속자 점검. 


#vi /var/log/secure 

#last -n 10 

- 최근 10번째까지의 접속기록을 확인. 


13. 계정별 최후접속기록 점검. 


#lastlog 

-lastlog는 현재 /etc/passwd에 존재하는 모든 계정을 대상으로 하여 언제 마지막으로 서버에 접속을 했는가를 확인. 

Mail, adm, bin 등의 계정들은 모두 "** Never logged in **" 이라고 되어 있는것이 정상. 




14. 현재 서버접속자 보기 


#w (telnet) 

#ftpwho(ftp) 


15. root명령어 사용기록 점검. 


#vi /root/.bash_history (.set nu) 

#cat /root/..bash_history | wc -l (1000라인 이상 되어야 정상) 


16. 계정별 사용명령어파일 점검. 


#find / -name .bash_history -exec ls -l {} \; (각 계정별 .bash_history 파일의 존재여부) 

#find / -name .bash_history -exec cat {} \; (파일의 내용까지 모두 확인해 볼 수 있음) 


17. root소유자 점검(UID와 GID가 0인 사용자 점검) 


#cat /etc/passwd | grep 0:0 


18. 서버내에 중요한 디렉토리 점검 


- /etc/xinetd.d/ (xinetd로 서비스되는 인터넷서비스 파일들이 존재하는 디렉토리) 

- /etc/rc.d/ (부팅에 관계된 파일) (파일들을 복사 후 파일용량등을 비교하기) (커널패닉의원인) 

- /etc/rc.d/init.d/ (부팅시에 특정 서비스나 데몬들을 시작시키는 스키립트 파일) 


19. .rhosts 파일 점검 


#find / -name .rhosts -exec ls -l {} \; 

#find / -name .rhosts -exec cat {} \; 

- 원격에서 패스워드등의 확인과정없이 바로 접속하기 위해서 사용되는 파일 



20. 메모리사용량 점검. 


#free -m 

#cat /proc/meminfo (free 와 top 는 이 파일을 참조하여 보여준다.) 

#top -d2 


21. 중요 관리자용명령어 점검. 


아래의 명령어들을 퍼미션을 100으로 설정한다. 변경 후 퍼미션 변경여부를 확인. 


#chmod 100 /usr/bin/top 

#chmod 100 /usr/bin/pstree 

#chmod 100 /usr/bin/w 

#chmod 100 /bin/ps 

#chmod 100 /usr/bin/who 

#chmod 100 /usr/bin/find 

#chmod 100 /bin/df 

#chmod 100 /bin/netstat 

#chmod 100 /sbin/ifconfig 

#chmod 100 /usr/sbin/lsof 

#chmod 100 /usr/bin/make 

#chmod 100 /usr/bin/gcc 

#chmod 100 /usr/bin/g++ 

#chmod 100 /usr/bin/c++ 


22. su 명령어를 이용한 root권한 사용자 점검. 


su 명령어의 사용내역을 확인할 수 있음. 


#cat /var/log/messages | grep root 


23. 최근 n 일전 변경된 파일 점검. (단위는 일) 


#find / -ctime -1 -print | more 


25. find 를 이용한 특정파일 점검하기. 


.exec 파일찾기 

#find / -name '.exec' -exec cat {} \; -print 


#.forward 파일체크 

#find / -name '.forward' -exec cat {} \; -print 


write 퍼미션이 있는 파일(디렉토리)찾기 

#find / -type f \( -perm -2 -o -perm -20 \) -exec ls -lg {} \; 

#find / -type d \( -perm -2 -o -perm -20 \) -exec ls -ldg {} \; 


SteUID SetGID 체크하기 

#find / -type f \( -perm -004000 -o -perm -002000 \) -exec ls -lg {} \; 


/dev 체크 

#find /dev -type f -exec ls -l {} \; 


소유자없는 파일 및 디렉토리 찾기 

#find / -nouser -o -nogroup -print 


원격리모트 접속허용 파일(.rhosts)찾기 

#find / -name .rhosts -print 


최근 변경된 파일들 찾기.(파일or디렉토리) 단위는 일 

#find / -ctime -20 -type f or d 


현재 서버에서 열려진 포트 및 접근저보 점검 

#netstat -an | grep LISTEN (포트들과 열결되어 있는 실행데몬들을 확인) 

#lsof | grep LISTEN (좀 더 자세히 확인) 


26. 관리자용 명령어 퍼미션 수정하기. 


#chmod 100 /usr/bin/top 

#chmod 100 /usrbin/pstree 

#chmod 100 /usr/bin/w 

#chmod 100 /bin/ps 

#chmod 100 /usr/bin/who 

#chmod 100 /usr/bin/find 

#chmod 100 /bin/df 

#chmod 100 /bin/netstat 

#chmod 100 /sbin/ifconfig 

#chmod 100 /usr/sbin/lsof 

#chmod 100 /usr/bin/make 

#chmod 100 /usr/bin/gcc 

#chmod 100 /usr/bin/g++ 

#chmod 100 /usr/bin/c++ 


27. 중요한 파일퍼미션과 소유권 제한 및 점검. 


#chmod 644 /etc/service 

#chmod 600 /etc/xinetd 

#chmod 644 /etc/mail/aliases 

#chmod 600 /etc/httpd/conf/httpd.conf 

#chmod 644 /var/log/wtmp 

#chmod 644 /var/run/utmp 

#chmod 644 /etc/motd 

#chmod 644 /etc/mtab 

#chmod 600 /etc/syslog.conf 


#/etc, /usr/etc, /bin, /usr/bin, /sbin, /usr/sbin 


#chmod 1777 /tmp 

#chmod 1777 /var/tmp 


28. umask 값 확인하기. 


root의 umask 값 확인하기. 

#umask 

022 -->파일은 644 디렉토리는 755로 생성됨. 

027 -->파일은 640 디렉토리는 750로 생성됨. 


29. /dev 에 device 파일 이외의 것이 존재하고 있는지 확인. 


#find /dev -type f -exec ls -l {} \; 


30. 일반사용자의 명령어 패스 


#/usr/local/bin:usr/local/mysql/bin:/home/hosting/bin/ 

일반사용자가 사용가능한 명령어를 모두 이것에 둠. 


31. 관리자의 명령어 패스 


#:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin 


#/X11:/usr/X11R6/bin:/usr/kerberos/bin:/root/bin 


32. 특정 그룹만의 su 사용권한 허용하기 


#vi /etc/group (wheel구릅에 su 사용권한을 가질 유저 추가하기) 

#wheel:x:10:root,cream 


#vi /etc/pam.d/su (두줄 추가하기) 


#auth sufficient /lib/security/pam_rootok.so 

#auth required /lib/security/pam_wheel.so allow group=wheel 


#vi /var/log/message 에서 확인 


33. chmod 400 /etc/shadow 


34. 시스템 기본로그파일. 


- /var/log/messages 

- /var/log/secure 

- /var/log/wtmp 

- /var/run/utmp 

- /var/log/lastlog 


35. utmp, wtmp, lastlog 파일 


utmp파일 : 현재시스템에 접속해 있는 사용자의 정보를 가지고 있음. 


#strings utmp | more 


정보 이용 명령어 

login(1), who(1), init(8), last(8), lastcomm(8) 


wtmp파일 : 처음부터 접속했던 모든 사용자의 로그인정보와 로그아웃정보를 가지고 있음. 


#strings wtmp | more 


정보 이용 명령어 

login(1), who(1), init(8), last(8), lastcomm(8) 


lastlog 파일 


가장 최근에 로그인한 정보를 저장함. 


last 라는 명령어로 확인할 수 있음. 


36. 패스워드 유출대처방안(웹) 


perl을 이용한 방법. 



AllowOverride FileInfo AuthConfig Limit 

Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec 

Options Indexes SymLinksIfOwnerMatch IncludesNoExec ExecCGI 

Options Indexes SymLinksIfOwnerMatch IncludesNoExec 


Order allow,deny 

Allow from all 



Order deny,allow 

Deny from all 




SSI의 exec 명령어를 이용하는 방법 


# AddType text/html .shtml 

# AddHandler server-parsed .shtml 


37. PortSentry를 이용한 실시간 해킹방어 구현.(잘못 사용할시 서버접속 안됨) 


#tar -xvzf portsentry-1.1.tar.gz 

#make linux 

#make install 


#/usr/local/psionic/portsentry/portsentry -tcp 

#/usr/local/psionic/portsentry/portsentry -udp 

#/usr/local/psionic/portsentry/portsentry -stcp 

#/usr/local/psionic/portsentry/portsentry -atcp 

#/usr/local/psionic/portsentry/portsentry -stdp 


#vi /etc/hosts.deny 점검. 


38. Chkrootkit 로 백도어 점검. 


#tar -xvzf chkrootkit.tar.gz 

#make sense 

#./chkrootkit (점검명령어) 


39 ping 을 이용한 DOS 공격 막는 방법. 


#vi /etc/sysctl.conf 

#net.ipv4.icmp_echo_ignore_broadcasts = 1 


#sysctl -w 

#/etc/rc.d/init.d/network restart 

#sysctl -a | grep ignore_broadcasts 


40. Nmap를 이용 포트스켄 하여 해킹가능성 체크. 


#nmap -sS -p80 211.42.48.110 -O -v www.armian.net 

#nmap -sS -O -v 211.42.48.114 


 


iptables -A INPUT -s 211.63.89.95 -p icmp -j DROP 


// 모든 패킷 DROP 

iptables -A INPUT -s 0/0 -j DROP 


iptables -A OUTPUT -f -d 192.168.1.1 -j DROP 


// TCP option --syn A에서 B서버로 나가는 패킷은 되고 B에서 A로 들어오는 패킷은 막는다. 

iptables -p TCP -s 192.168.1.1 --syn 


iptables -A INPUT -p tcp ! --sport 0:1024 --dport 25 -J ACCEPT 


// UDP flooding 예방책 

iptables -P INPUT ACCEPT 

iptables -P OUTPUT ACCEPT 

iptables -F INPUT 

iptables -F OUTPUT 

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 

iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 

iptables -A OUTPUT -p udp ! --dport 53 -m state --state NEW -j DROP 


// 웹해킹 대응방법 

[root@wowsecurity dev]# chmod 700 /usr/bin/wget /usr/bin/lynx /usr/bin/curl 

modsecurity 사용 


// 한국에서의 ftp만 허용하고 나머지 국가에서의 접속은 차단하고자 할 때 

iptables -A INPUT -p tcp --dport 21 -m geoip --src-cc KR -j ACCEPT 

iptables -A INPUT -p tcp --dport 21 -j DROP 

또는 iptables -A INPUT -p tcp --dport 21 -m geoip ! --src-cc KR -j DROP 


// 동시접속 제한 

iptables -A INPUT -m recent --name badguy --rcheck --seconds 300 -j DROP 

iptables -A INPUT -p tcp --syn --dport 25 -m connlimit --connlimit-above 5 -m recent --name badguy --set -j DROP 

iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 15 ?connlimit-mask 24 -j DROP 

iptables ?A INPUT ?m psd ?j DROP 


// VPN 

Gateway - to Gateway 방식 

Host-to-Gateway 방식 


// tacacs 설정 

Router(config)# tacacs-server host x.x.x.x 

Router(config)# tacacs-server key cisco 

Router(config)# enable use tacacs 


switch>(enable) set authentication login tacacs 

switch>(enable) set tacacs server x.x.x.x 

switch>(enable) set tacacs key cisco 


// NTP 

장시간 상이한 시간설정으로 분석에 어려움, 시간동기화를 시켜줘야 함 


// no login : 원격에서 passwd 없이 접근 가능 단 passwd가 설정되어야 한다. 

// no login local : passwd 설정 필요없다. 


// anti-spam 

# vi /etc/mail/access 

spammer.org REJECT 

x.x.x.0 RELAY 


# makemap has /etc/mail/access.db < /etc/mail/access 


// sendmail 환경파일 초기화 

# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf 


// tcpwrapper 텔넷 설정하기 

# vi /etc/inetd.conf 

telnet stream tcp nowait root /usr/sbin/in.telnetd in.telnetd 

위 문장을 다음과 같이 수정 

telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd 


# vi /etc/hosts.deny 

ALL:ALL 


# vi /etc/hosts.allow 

telnetd : x.x.x.x 


# service inetd restart 


// PAM 설정하기 

# vi /etc/security/limits.conf 

* hard maxlogins 6 

@users hard maxlogins 4 


// FIND 

find / -type f \( -perm -4000 -o -perm -2000 \) -ls // SETUID SETGID 파일들 검색 

find / -type f -exec grep 'hack' {} /dev/null \n; // hack 단어를 포함한 파일 검색 

find / -user 427 -print // 소유자 UID가 427인 파일을 보여줌 

find / -perm -0002 -type d -print // 일반유저가 쓰기권한이 있는 DIR을 보여줌 

find / -nouser -o -nogroup -print // 유저나 그룹이 없는 파일을 보여줌 


chattr +i - 추가/변경/삭제 불가능 

chattr +a - 추가만 가능 

chattr +A - 파일에 대한 atime 즉 접근시간 속성을 변경할수 있다. 


// proc 제어 

echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route 

-> spoofing을 막기 위해 source route 패킷을 허용하지 않는다. 소스 라우팅을 허용할 경우 악의적인 공격자가 ip 소스라우팅을 사용해서 목적지으 ㅣ경로를 지정할 수 있고 원래 위치로 돌아오는 경로도 지정할 수 있다. 


echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts 

-> smurf 공격에 악용될 수 있으므로 broadcast 주소를 통한 icmp echo에 대해 응답하지 않도록 한다. 


echo "0" > /proc/sys/net/ipv4/ip_forward 

-> 해당시스템을 통해 다른 시스템으로 패킷의 포워딩 되지 않도록 한다.(라우터나 게이트웨이가 아닐경우) 


echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects 

-> icmp redirect 허용하지 않는다. 허용할 경우 공격자가 임의의 라우팅 테이블을 변경할 수 있어 자신이 의도하지 않은 경로로 트랙픽이 전달될 수있다. 


echo "1" > /proc/sys/net/ipv4/conf/all/log_martians 

-> 스푸핑된 패킷이나 소스라우팅, redirect 패킷에 대해 로그파일 남긴다. 


echo "1" > /proc/sys/net/ipv4/tcp_syncookies 

-> syn flooding 공격에 대응하기 위해 syncookies기능을 켠다. 


echo -e "32768\t61000" > /proc/sys/net/ipv4/ip_local_port_range 

-> local port 범위 지정 


echo "1024" > /proc/sys/net/ipv4/tcp_max_syn_backlog 

-> backlog queue 사이즈를 늘려 공격에 대응한다. 


stunnel 

openssl must be installed. 

xinetd.conf 

service pop3s 

server = /usr/local/sbin/stunnel 

server_args = /usr/local/etc/stunnel/stunnel.conf 

service ssmtp 


// zone transfer 

dig @ns.wowsecurity.net. wowsecurity.net axfr 

host -l kunsan.ac.kr dns.kunsan.ac.kr 


-> master 는 slave에서만 zone transfer를 허용할 필요가 있다. 

slave는 다른 3, 4차 slave서버에 zone transfer를 제공하는 것이 아니라면 모든 zone transfer를 차단해야할것이다. 


//ssh에서 tcp-wrapper 사용하기 

./configure --with-libwrap 


// mysql 3306으로의 접속차단 

on compiling, --skip-networking 

max_user_connections 설정 제한 

show processlist 


// 한 IP에서 동시에 telnet 접속 2회 하는거 제한 

iptables -A INPUT -p tcp --syn --dport 23 -m connlimit-above 2 -j REJECT 


// FTP 접속 제한하기 

<Limit Login> 

Order deny,allow 

Deny from x.x.x.x 

Allow from All 


// SMURFFING 대책 

TCP/IP 대신 암호화로 전송한다.(IP 위조는 사실상 어려움) 

VLAN 사용 

IP FILTERING (IP와 MAC주소를 고정한다.) 

PORT SECURITY (MAC FLOODING 대비) 


// 설정 

SET PORT SECURITY 3/1 ENABLE MAC ADDRESS 


// 나프타 : TCP로 메모리 고갈(실제 사용자의 IP주소로 공격함) 


// smurf 대책 - 증폭네트워크딴에서 icmp echo reply 패킷에 대한 차단 or 어느정도의 대역폭만 허용 


// no ip redirects - icmp redirect 차단 


// ingress <-> egress 


// blackhole


출처 : http://blog.naver.com/mrbyj/140162304780