ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 시스템 보안 - sis.or.kr
    case Computer : 2009. 4. 2. 08:04
    1. inetd데몬 프로세스 반영 문제 
    
    
    > 훈련 시스템 접속 주소 : 211.241.82.54 
    > 해당 아이디(ID) : level1 
    > 해당 패스워드(PW) : passwd=1 
    
    
    
    그동안 ftp서버로 사용하던 시스템을 ftp서비스를 더이상 제공하지 않고 
    다른 용도로 사용하게 되었다. 
    현재 제공되고 있는 ftp서비스를 중지시키고 
    앞으로도 부팅시에도 더이상 제공되지 않도록 필요한 시스템 설정을 바꾸시오. 
    
    =>
    
    #vi /etc/inetd.conf
    
    ftp   stream   tcp  nowait   root   /usr/sbin/in.ftpd    in.ftpd
    설정 파일 안에서 ftp 서비스를 중지 시킨다.
    나는 주석으로 처리해버렸다.
    
    
    
    #finish
    password is sofull
    
     
     
     
     
     
     




    2. 부팅초기화 스크립트 작성 문제
    > 훈련 시스템 접속 주소 : 211.241.82.54 > 해당 아이디(ID) : level2 > 해당 패스워드(PW) : passwd=2 보안모니터링 프로그램 secure agent를 컴파일하여 실행파일을 얻었다. 그런데 이 실행파일은 daemon형태로 시스템에서 항상 실행되어야 하는 프로그램이다. 시스템이 부팅시마다 secure agent가 실행될 수 있도록 완전한 부팅 스크립트를 작성하여 적절한 위치에 설치하시오. 현재 secure agent 데몬의 실행파일 경로는 /usr/local/bin/sagentd이며, 설치하고자 하는 시스템은 solaris이다. => # vi /etc/rc.d/rc3.d/S98sagentd /usr/local/bin/sagent start # chmod /etc/rc.d/rc3.d/S98Sagentd # finish password is babyface 폴더를 유심히 보자 rc.d/rc3.d 이다.
     
     
     
     
     
     
     
     
    3. 쉘 환경변수 변경 문제 
    
    
    > 훈련 시스템 접속 주소 : 211.241.82.54 
    > 해당 아이디(ID) : level3 
    > 해당 패스워드(PW) : passwd=3 
    
    
    사용자의 쉘환경변수들은 그 설정값에 따라 때로는 보안상의 문제점을 
    야기시키기도 한다. 현재의 bash 쉘환경변수 설정을 살펴보고 보안상 문제가 
    있는 부분을 바로 잡으시오. 
    단, 이문제에서는 현재 접속되어 있는 쉘에 대해서만 일회성으로 바로잡으면 되며, 
    쉘환경변수 값을 영구적으로 바로잡기 위해 resource파일을 변경할 필요는없다.
    =>
    
    1. 처음에 시작하기 전에 알아야 할 것들...
    
       1)환경변수를 바꾸기 위해선..root권한이 있어야 한다.
       2)환경변수 목록을 보는 명령어 : env
       3)환경변수를 변경하는 방법 
            #PATH=/usr/local/bin:/usr/bin 
     #export PATH 
     PATH의 환경 변수를 설정해주는 예이다. 그러나 모든 환경변수를 
     선언해 주는 방법은 위와 똑같다. 
    
     #"환경변수"="경로명" 
     #export "환경변수" 
    
    2. 그외에 지식
    
     환경변수 이름 의미
     EDITOR  	 기본적으로 사용하는 문서 편집기 
     HOME            사용자의 홈 디렉토리 
     LANG            사용자의 언어 
     LD_LIBRARY_PATH 동적 라이브러리의 경로 
     LONGNAME        사용자의 이름 
     MAIL            메일 도착할 곳을 지정 
     MANPATH "man"   명령시 참조할 디렉토리 경로 
     PATH            실행파일을 찾을 디렉토리 경로 
    
    
    환경변수에 현재 폴더를 나타내는 "./" 가 있느면 안된다.
    
    
    
     
     
     
     
     
     

    4. 악성 프로그램 프로세스 종료 문제
    > 훈련 시스템 접속 주소 : 211.241.82.54 > 해당 아이디(ID) : level4 > 해당 패스워드(PW) : passwd=4 관리중인 solaris 시스템이 어느날 해킹을 당하여 외부 침입자가 불법침입을 하였다. 다행히 외부침입자의 침입경로를 파악하여 제거하였으나, 불법침입을 한 상태에서 행한 불법작업내역은 아직 확인하지 못하였다. 특히 이 침입자는 이 시스템을 경유지로 하여 타 시스템에 대하여 지속적인 스캐닝 또는 서비스거부공격을 하고 있을 가능성이 매우 높다. solaris 시스템을 평소 관리했던 상식에 비추어서 시스템내에서 의심스럽게 보이는 프로세스를 찾아서 강제종료 시키시오. => 1. 문제를 풀기 위해 알아야 할것들.. 프로세스 확인 : ps (process state) 네트워크 확인 : netstat 프로세스에 의해 열린 파일 확인 : lsof 프로세스 종료 : kill "프로세스ID" ps로 확인해보면 httpd 가 떠있다. #>kill -9 PID 2. finish password isstacheldraht 사용법 kill [ -signal | -s signal ] pid ... kill [ -L | -V, --version ] kill -l [ signal ] 설명 프로세스에 signal을 보내기 위해서 사용한다. 시그널을 받은 프로세스는 시그널핸들러를 실행시키거나 시그널 핸들러가 없을 경우 시그널에 대한 기본 행동을 한다. 일반적으로 HUP, INT, KILL, STOP, CONT를 자주 사용한다. 시그널은 이름을 사용할 수도 있고, 번호를 사용할 수도 있다. 즉 -9 와 -SIGKILL 은 동일하다. 'pid 앞에 마이너스 표시가 붙을경우 모든 프로세스 그룹에게 시그널을 보낸다. pid를 -1로 할경우 자신과 init프로세스를 제외한 모든 프로세스에게 시그널을 보낸다. 시그널들 이름 번호 행동 설명 0 0 n/a 시그널을 받는지 확인하기 위해서 사용 ALARM 14 종료 HUP 1 종료 INT 2 종료 KILL 9 종료 이 시그널은 절대 무시할 수 없다. PIPE 13 종료 PROF 종료 TERM 15 종료 USR1 종료 USR2 종료 VTALRM 종료 PWR 무시 시스템에 따라 종료하는 경우도 있음 WINCH 무시 CHLD 무시 URG 무시 TSTP 멈춤 쉘과 상호작용하기 위함 TTIN 멈춤 쉘과 상호작용하기 위함 TTOU 멈춤 쉘과 상호작용하기 위함 STOP 멈춤 쉘과 상호작용하기 위함 CONT 재시작 만약 멈춤상태였다면, 계속진행한다. 그렇지 않다면 무시 ABRT 6 core FPE 8 core ILL 4 core | QUIT 3 core SEGV 11 core TRAP 5 core SYS core 대부분 미구현 EMT core 대부분 미구현 BUS core XCPU core XFSZ core
     
     

     







    5.네크웍서비스 데몬 설정 변경 문제
    > 훈련 시스템 접속 주소 : 211.241.82.54 > 해당 아이디(ID) : level6 > 해당 패스워드(PW) : passwd=6 회사의 홈페이지 서버로 사용하기 위한 용도로 Linux시스템을 인스톨 하였다. 하지만, 인스톨하는 과정에서 일부 네트웍서비스가 같이 인스톨되었다. 이중, named 같은 네트웍서비스는 불필요한 것이므로 disable시켜야 된다. 시스템 설정을 변경시켜서 이 서비스가 영구적으로 제공되지 않도록 하시오. (단, 나중에 다시 이 네트웍서비스가 필요하게 될지 확실치 않기 때문에 서비스 관련 파일들을 완전히 삭제해서는 안된다.) => process에 떠있는 named 를 죽인다 #ps -ef #kill [named PID] #mv /etc/rc.d/rc3.d/S45named /etc/rc.d/rc3.d/45named 이름을 변경해버렸다 #finish password is 542014
     
     
     
     
     
     
    6. umask를 이용한 파일 접근 권한 설정 문제 
    
    > 훈련 시스템 접속 주소 : 211.241.82.54 
    > 해당 아이디(ID) : level7 
    > 해당 패스워드(PW) : passwd=7 
    
    csh를 사용하는 솔라리스 시스템 로그인을 한 상태에서 파일을 새로 생성할때마다 
    파일모드가 -rw-r-r-- (644)로 된다. 하지만 이 파일모드는 다른 유저가 파일 
    내용을 열람할 수 있는 취약점이 있기 때문에 좋지 않아서 일일이 생성된 파일에 
    대해서 chmod명령어를 통하여 -rw------- (600)으로 바꿔줘야만 했다. 
    이 작업은 번거롭기 때문에 쉘환경변수를 적절히 변경하여 새로 파일을 
    생성할때마다 default 파일모드가 -rw------- (600)이 되도록 설정하시오. 
    단, 이문제에서는 현재 접속되어 있는 쉘에 대해서만 일회성으로 바로잡으면 되며, 
    쉘환경변수 값을 영구적으로 바로잡기 위해 resource파일을 변경할 필요는없다. 
    
    =>
    
    # umask
    022
    # umask 077
    # umask
    077
    #finish
    password is 7105525
    
    
    *umask 066 도 맞다. 여기에서는 077만 답으로 설정한듯.
     기본 셋팅 default로 일반 파일은 666이고 디렉토리는 777이다.
    무슨 말이냐하면 umask를 000으로 하고 일반 파일과 디렉토리를 생성하고
    touch test
    mkdir dtest
    
    퍼미션을 비교하여 보라. 
    디렉토리는 777이지만 파일은 666이다.
    그렇기 때문에 umask를 066으로 설정해도 파일을 생성할때는 600으로 만들어진다.
    디렉토리는 711로 설정되지만 위에 문제에서는 디렉토리는 언급하지 않았다.
    그리고 디렉토리까지 생각해서 설정한다면 177로 해야
    파일과 디렉토리 모두 600으로 설정된다.
    
    //////////////////////////////////////
    umask?
    솔라리스에서는 여러 가지 환경 설정 파일을 제공하는데, 
    이것은 사용자를 더욱 자유롭고 융통성 있게 만들어 준다. 
    이런 파일들은 보통 홈디렉토리안에 위치하고 있으며, '.'으로 시작 하는 파일들을 말한다. 
    'ls -a' 명령으로 파일의 존재를 확인할 수 있으며, 
    파일의 이름은 "Resource Configuration"이라는 의미의 "rc"라는 스펠링으로 끝나는 경우가 많다.
    Umask는 처음 파일이나 디렉토리를 만들면 파일이나 디렉토리에 대한 
    기본적인 권한(permission)이 자동설정 되는데, 이러한 것은 시스템파일의 umask에 의하여 
    결정이 된다. umask는 .profile, .cshrc, .bashrc, .login과 같은 사용자 프로파일에서 설정한다.
    
    
     
     
     
     
     
    7. checksum값을 이용한 백도어 검출 문제 
    
    
    > 훈련 시스템 접속 주소 : 211.241.82.54 
    > 해당 아이디(ID) : level8 
    > 해당 패스워드(PW) : passwd=8 
    
    
    Solaris시스템에 해커가 침입하여 root 권한을 빼앗기는 보안사고가 발생하였다. 
    해커가 침입을 한 상태에서 설치한 백도어를 찾아내야 한다. 그런데 이번 
    해킹패턴을 보면 /usr/sbin/ 디렉토리 있는 네트웍서비스 프로그램중에 하나가 
    백도어로 바뀐것으로 강하게 의심된다. 다행히도 해킹사고가 발생하기 이전에 
    /backup/usr/sbin 이라는 디렉토리를 만들어서 원본파일들을 이미 복사해 놓았다. 
    원본파일과 비교하여 백도어 프로그램을 찾아내시오. 
    (찾아낸 후에 정답확인 프로그램을 실행하여 백도어 프로그램 파일명을 
    입력하시오). 
    
    =>
    
    먼저 checksum 값을 받아온다.
    
    #>cksum /usr/sbin/* > after
    #>cksum /backup/usr/sbin/* > before
    
    이 상태로 비교하면 모두 다르게 나온다. 이유는 /backup/ 디렉토리가 추가 되어있기 때문에 모두 다르게 나온다.
    
    before를 vi 로 열어서 다음과같은 명령어를 입력한다.
    
    :%s/\//backup//
    
    #>diff before after > result
    #>cat result | more
    
    많은 파일이 나온다
    이중에서 새로 생겨난 파일을 제외(프로그램이 바뀌었다고 했기때문에)하고 나열해보면
    
    /usr/sbin/in.fingerd  증가
    /usr/sbin/install.d   증감없음
    /usr/sbin/sparcv7     증감없음
    /usr/sbin/sparcv9     증감없음
    /usr/sbin/static      증감없음
    
    오직 in.fingerd 파일만 증가한 것을 볼수 있다. 
    
    
    
    ========================================================================
    
    여기에서 diff 명령어서 -u 옵션이 없다.. 
    상위버젼에서는 -u 를 주면 변화량을 +/- 로 증감을 표시 해준다.
    
    
    
    
    
     
     












    8.kerberos를 이용한 암호화 NFS이용 문제
    > 훈련 시스템 접속 주소 : 211.241.82.54 > 해당 아이디(ID) : level9 > 해당 패스워드(PW) : passwd=9 솔라리스의 NFS(Network File System)을 이용하여 NFS서버로부터 파일시스템을 마운트하는 NFS클라이언트 시스템을 구축하고 싶다. 현재 네트웍에 존재하는 NFS서버의 hostname은 nserver 이며 NFS서버에서 제공하는 파일시스템은 /export/share이다. 그런데 위 NFS서버에서는 kerberos를 이용한 암호화 NFS만을 제공한다고 하며, 본 시스템(hostname은 nclient)은 이미 위 NFS서버의 principal에 등록이 된 상태이며, NFS서버로부터 kerberos ticket도 이미 받은 상태이다. Kerberos의 암호화 옵션을 이용하여 위 NFS서버의 파일시스템을 본 시스템의 /home2로 mount하시오. 단, 이문제에서는 현재 접속된 쉘 상태에서 일회성으로 mount하면 되며, 시스템이 부팅될때마다 항상 mount되도록 설정할 필요는 없다. => #mount -F nfs -o kerberos nserver:/export/share /home2 #finish password isgallery ------------------------------------------------------------------------------- mount 명령어 mount는 disk device를 사용하기 위해 tree 구조의 임의의 디렉토리로 연결시키는 것을 하는 명령어이다.   1. /sbin/mount 1) File system을 사용하기 위해서는 반드시 mounting을 해야만 가능하다. mount 명령어는 아래와 같은 argument가 필요하다. ① File system Type ② Access하기 위한 directory 이름 ③ Mounting하기 위한 directory 이름 ex) # mount -F ufs /dev/dsk/c0t3d0s7 /home 2) mount 명령어에 아무런 argument도 주지 않으면 현재 mount된 file system을 보여준다. ex) # mount 3) Mount 명령어는 각 file system의 mount된 정보를 /etc/mnttab로 읽어서 보여준다.   2. 특별한 file system type의 mount Solaris는 다양한 file system을 제공하므로 mount시 알맞은 file system type을지정해야 한다. mount 명령은 mount될 file system type의 지정을 위한 -F option을 갖고 있다. ① Floppy Diskette(DOS File system) # mount -F pcfs /dev/dskkette /pcfs ② CD-ROM Driver(HSFS File system) # mount -F hsfs -o ro /dev/dsk/c0t6d0s0 /cdrom ③ Tempary File system # mount -F tmpfs swap /tmp1 ④ NFS File system # mount -F nfs server:/user1 /home ⑤ Cache File system # mount -F cachefs -o backfstype=nfs,backpath=/home\,cachedir=/cache1 server:/user1 /usr ⑥ mountall - /etc/vfstab 밑의 장치들을 mount ※ /etc/vfstab에 넣어주면 부팅시 장치 인식 ⑦ 부팅시가 아닌 수동으로 마운트 시키려면 /etc/vold.conf 파일 앞에 +- # 有 → 수동 mount +- # 無 → Auto mount 재부팅 하지 않고 vold.conf를 다시 읽음 -+--# sh /etc/init.d/volmgt stop +- # sh /etc/init.d/volmgt start # volcheck   3. /sbin/umount 명령어 □ umount 명령어를 사용하여 file system에 사용자 access가 불가능하도록 한다. umount 명령의 argument는 block device name나 /etc/vfstab 파일의 지정된 mount point를 사용한다. ① 사용법 # umount /home → mount point를 사용 # umount /dev/dsk/c0t3d0s7 →block device name 사용 ② umount 작업을 하기 위해서는 file system에 대하여 사용자나 process의 acess가 없어야 한다. 이를 확인하기 위하여 fuser 명령어를 사용한다. - 사용법: fuser [-a] [-v] 디렉토리 ex) fuser -cu /home ※ root file system은 어떠한 방법으로도 umount할 수가 없다.   4. /etc/vfstab 파일 □ /etc/vfstab 파일은 file system mount를 위한 기본환경을 제공한다. /etc/vfstab 파일의 모든 file system은 시스템이 multi-user 모드로 booting 하면서 자동으로 check하고 mount 한다. /etc/vfstab 파일에 등록된 file system은 mount point directory 이름만으로도 mounting이 가능하다. ex) #mount /usr /etc/vfstab 파일의 모든 file system을 mounting 할 때는 "-a" option을 사용 ex) # mount -a   5. 플로피 디스크 Mount □ 3.5" 프로피 디스크를 UFS(Unix File System)로 사용. ex) # sh /etc/init.d/volmgt stop # newfs /dev/rfd0a # mount /dev/fd0a /mnt # cd /mnt # ls # umount /mnt # cd / # eject
     






    9. 특정 날짜에 설치된 해킹 프로그램 검출 문제
    > 훈련 시스템 접속 주소 : 211.241.82.54 > 해당 아이디(ID) : level10 > 해당 패스워드(PW) : passwd=10 Solaris시스템(13.155.33.234)을 관리하던 중 H보안회사(233.235.231.233)로부터 다음과 같은 항의메일을 받았다. <당신의 컴퓨터로부터 주기적인 해킹시도가 있으므로 다음 로그를 참고하여 시스템을 보안조치해달라.> 시스템을 점검하여 해커가 설치한 해킹프로그램을 삭제하시오.참고로 이 시스템이 셋업된 날짜는 2001년 10월1일이며, H사로부터 보내온 로그파일은 다음과 같다. Oct 26 18:07:45 233.235.231.233 rpc.statd[189]: gethostbyname format string attack from 13.155.33.234 Oct 26 18:08:14 233.235.231.233 rpc.statd[189]: gethostbyname format string attack from 13.155.33.234 => 로그에 날짜가 10월 26일 18시 이다.. 그렇다면 저 시간 이전에 해킹 프로그램이 설치되었다는 것이다. 그리고 또한 시스템이 셋업된 10월 1일 이후에 해킹 프로그램이 설치되었다는 말이다. find에 -newer 옵션을 사용하기위해서 조작된 파일 2개를 만든다. #>touch -t 200110020000 start #>touch -t 200110270000 finish 만들어진 시간을 셋업된 다음날과 27일로 설정했다. 셋업된 날부터해서 찾으면 무지많은 파일이 나온다. 식별이 불가능하기때문에 시스템이 셋업된 날은 배제하였다. #>find / -newer start ! -newer finish | grep rpc {(start 라는 파일보다 늦게 만들어진것)-(finish 라는 파일보다 늦게 만들어진것)}&(파일이름에 rpc가 들어간것) /usr/share/lib/rpc-exp #rm -rf /usr/share/lib/rpc-exp #finish password is Red =========================== touch -t : 만들어진 시간 선택 find -newer filename 특정 file이후에 만들어진 것을 찾는다
     
    10. 패스워드 설정 문제 
    
    > 훈련 시스템 접속 주소 : 211.241.82.54 
    > 해당 아이디(ID) : level11 
    > 해당 패스워드(PW) : passwd=11 
    
    
    관리중인 솔라리스 시스템에 계정을 가지고 있는 내부사용자들에게 패스워드를 
    자주 바꿀것을 공지하고 있으나 일부 사용자들이 잘 따라주지 않아서 
    부득이 강제로 패스워드를 바꿔야하는 제한기간을 설정해야 한다. 
    yspace라는 계정의 패스워드 정책을 다음과 같이 강제 설정하시오. 
    - 패스워드를 바꾼지 14일이 되면 무조건 새 패스워드로 바꿔야함. 
    - 패스워드를 새로 바꾼지 만 하루가 지나기 전에는 패스워드를 변경할 수 없음. 
    (단, yspace라는 계정에 대해서만 적용되어야 하고 
    타 계정에 영향을 주어서는 안됨) 
    
    =>
    
    /etc/shadow 파일 형식
    loginID:passwd:lastchange:min:max:warn:inactive:expire
    
    min과 max만 고치면 끝~
    
    min 최소 몇일까지 쓸것인지
    max 최대 몇일까지는 변경할수 없음
    
     




    11. 홈 디렉토리에 불필요한 파일 검출 문제
    > 훈련 시스템 접속 주소 : 211.241.82.54 > 해당 아이디(ID) : level12 > 해당 패스워드(PW) : passwd=12 .rhosts 파일은 보안상 별로 권장되지 않은 파일임에도 불구하고 일부 사용자들은 계속 사용하는 경향이 있다. yspace라는 계정 사용자가 홈디렉토리에 만든 .rhosts을 삭제하고 앞으로도 만들지 못하도록 조치하시오. => #rm .rhosts .rhosts 라는 파일을 삭제하고 #mkdir .rhosts .rhosts라는 디렉토리 파일을 생성한다. #chmod 000 .rhosts 건들수 없게 만들면 같은 이름은 못만들기 때문에 같은 이름에 파일을 생성할수 없다.
     



    12. lp취약점 패치 문제
    > 훈련 시스템 접속 주소 : 211.241.82.54 > 해당 아이디(ID) : level18 > 해당 패스워드(PW) : passwd=18 솔라리스 2.8 시스템을 운영중에 파일프린팅에 사용되는 lp라는 root setuid 프로그램이 버퍼오버플로우 취약점이 있는 것으로 알려졌다. 하지만 파일 프린팅을 해야되기 때문에 이 프로그램을 제거할 수는 없고, 시스템의 용도때문에 root setuid를 제거할수도 없다. 이 lp라는 프로그램에 대해여 적절한 보안해결책을 모색하시오. 참고로, 다행히 OS제작사에서는 이 프로그램의 보안버전(patch)를 최근에 109320-04 패치번호로 발표된바 있으며, 이 패치파일을 /var/sadm/spool/patch/109320-04.zip 에 다운로드 받아놓았다. => 1. /var/sadm/spool/patch/ 폴더안에 이미 존재 하므로 그냥 #>patchadd 109320-04 이러하면 패치가 된다.-_-;; #finish passwordn is bebop ----------------------------------------------------------------------------- 1. 패치확인하기 showrev [-a] [-p] [-w] [-c command] 명령어로 확인할수 있다. 2. 패치하기 & 패치 삭제하기 patchadd [patch ID] : 패치 하기 patchrm [patch ID] : 패치 삭제
     
     
     
    13.다운로드받은 패치 파일의 checksum 값 확인을 통한 변조확인 
    
    > 훈련 시스템 접속 주소 : 211.241.82.54 
    > 해당 아이디(ID) : level21 
    > 해당 패스워드(PW) : passwd=21 
    
    
    OS 패치를 하기 위해 패치 파일을 다운받은 관리자는 해당 파일이 변조가 되지 않은 무결한 파일인지 
    확인해 보려고 한다. 패치 파일의 checksum 값과 MD5 값을 확인하여 변조여부를 확인해 보시오. 
    (패치 파일은 /var/spool/patch 아래에 존재) 
    
    =>
    문제에는 chksum에 값이라고 되어있지만 답에서는 sum에 값을 원하고 있다
    
    #>sum 110281-02.jar
    #>md5 110281-02.jar
    
    
    #>finish
    Enter the result of sum--including file name >
    
    Enter the result of md5--only md5 value>
    
    
     
     
     
     
     
    14. Linux 시스템상의 /etc/lilo.conf 파일을 통한 물리적 보안 설정 
    
    > 훈련 시스템 접속 주소 : 211.241.82.54 
    > 해당 아이디(ID) : level22 
    > 해당 패스워드(PW) : passwd=22 
    
    
    학교 연구실에 있는 실험용 서버인 Linux 7.0 서버는 학생들이 많이 출입하는 실습실에 설치되어 있다. 
    Linux 시스템의 물리적 보안을 위하여 BIOS에 암호를 설정한 상태이며 학생들이 싱글 유저 모드로 부팅하여 
    root 패스워드를 바꾸지 못하도록 미리 패스워드를 sislilo로 설정하여라. 
    
    =>
    
    #vi /etc/lilo.conf
    lilo에 설정파일에
    password=sislilo 를 추가 한다.
    
    
    #/sbin/lilo
    lilo 실행
    
    
    #finish
    password is agrarian
    
    ---------------------------------------------------------------------------------
    
    
    lilo......
    1.lilo의 환경파일 및 실행파일
      환경파일 : /etc/lilo.conf
      실행파일 : /sbin/lilo
    
      * 환경파일을 바꾸면 /sbin/lilo 를 실행해야한다.
    
    2. lilo와 grub 간의 변경 방법
    
    lilo -> grub 할때는 /sbin/grub-install /dev/hda
    
    grub -> lilo 할때는 lilo.conf 파일을 작성하고 /sbin/lilo를 실행
    
    
    3. lilo.conf파일 분석
    
    #cat /etc/lilo.conf
    prompt
    timeout=20 -> 키보드 입력 시간 5초
    default=linux  -label 값(?)이 들어감
    boot=/dev/hda
    map=/boot/map
    install=/boot/boot.b
    #message=/boot/message : 주석처리를 하면 부팅시 부트위치를 설정하는 부분을 없앤다(?)
    message=/boot/message.txt : 임의로 원하는 파일 편집해서 지정할 수 있다.
    linear
    password=1234 -> lilo에 패스워드를 건다.
    restricted ->password로 패스거는 방법은 모든 모드에 패스를 걸어 불편함으로 문제점을 보안하는 방법으로 default(/etc/initab)나 타 os는 패스를 안건다.
    single-key :번호를 누르면 aliais번호(?)로 가도로 지정
    
    
    image=/boot/vmlinuz-2.4.20.8 -> 실제 부팅이미지
    label=linux
    initrd=/boot/initrd-2.4.20-8.img ->부팅시 필요한 디바이스관련 이미지
    read-only
    append="root=LABEL=/"
    alias=1 -> single-key 값
    
    other=/dev/hda1
    label=win
    alias=2
    
    
    4. /sbin/lilo -D 옵션
    #lilo -D win : dafault 를 무시하고 win 으로 부팅하게 함
    
    #lilo -D linux
    Ignoring entry 'default'
    Added linux *
    
    
    -D 옵션으로 무시된것을 원상태로 복구
    
    #lilo -u
    #lilo
    Added linux *
    
     
    
    5. 참고[부팅디스크 만들기]
    
    #mkbootdisk --device /dev/fd0 'uname -r'
    
    부팅디스크로 부팅할때
    
    cmos에서 floopy로 부트지정
    boot:vmlinuz root=/dev/hda1
    lilo를 실행하면 MBR(?)에 올라온다. 
    
    
    
     
     
     
     
    15. PAM 모듈을 이용한 내부 서비스 거부공격 대처를 위한 설정 문제 
    
    > 훈련 시스템 접속 주소 : 211.241.82.54 
    > 해당 아이디(ID) : level24 
    > 해당 패스워드(PW) : passwd=24 
    
    
    실습용으로 학생들에게 계정을 부여한 학교의 Linux 서버에서 학생들이 실수 또는 
    고의적으로 프로세스나 CPU의 과도한 점유, 메모리 고갈등으로 다른 학생들이 
    실습을 할 수 없는 내부 서비스 공격이 자주 발생하고 있다. 이런 문제점을 해결 
    하기 위하여 학생들이 사용할 수 있는 CPU 선점시간을 최대 10분 그리고 Data 
    크기를 10M 최대로 띄울 수 있는 프로세스개수를 10개미만으로 제한하도록 하시오. 
    LINUX서버에는 PAM이 설치되어 있고 학생들은 student의 그룹으로 설정되어 있다. 
    
    =>
    *문제 요점
    - PAM 모듈 이용
    - student 그룹으로 설정
    - 설정해야 할 것
                         - CPU 선점시간 10분미만으로
                         - data 크기 10MB
                         - 최대 process 개수 10개 미만
    
    
    *문제 풀이
    -pam 설정 관련파일 : /etc/security/limits.conf
                                   /etc/pam.d/login
                                   /lib/security/pam_limits.so
    
    
    limits.conf 파일 설명
    ------------------------------------------------------------------
     :  user name 
                      groupname(ex: @groupname)
                      wildcard  *
    
       : "soft" or "hard"
    
       : core      - limits the core file size (KB)
                    data      - max data size (KB)
                    fsize     - maximum filesize (KB)
                    memlock   - max locked-in-memory address space (KB)
                    nofile    - max number of open files
                    rss       - max resident set size (KB)
                    stack     - max stack size (KB)
                    cpu       - max CPU time (MIN)
                   nproc     - max number of processes
                    as        - address space limit
                   maxlogins - max number of logins for this user
                   priority  - the priority run user process with
    --------------------------------------------------------------------
    
    문제 대로 설정 해보자
    
                 
    @student     soft         nproc        9                // nproc 최대 process 개수
    @student     hard        rss          10000           // rss     data 크기
    @student     hard        cpu          10               // cpu    cpu 선점 시간
    
    저장하고 나와서
    
    /etc/pam.d/login 파일을 수정한다
    
    session  required    /lib/security/pam_libmits.so 
    
    
    finish
    
    password is MLaaVStzPP
    
    
    ---------------------------------------------------------------------
    
    
    간단히 PAM 이란?
    
    PAM은 장착이 가능한 인증모듈 이다.
    PAM은 login, ftp, telnet 등의 일반적인 서비스에 대한 인증부분을 효율적이고 보다
    쉽게 관리하기 위해 SUN사에서 처음 고안된 것으로 리눅스에서도 받아들여 사용하고 있다.
    
    
    PAM으로 가능한 주요설정
    1. 패스워드 크랙이나 부르트포스 공격(brute force attack)을 어렵게 만든다.
    2. 사용자들 시스템 자원(프로세스 수, 메모리 양, 등..) 을 제한여 서비스 거부공격을
        어느정도 막을 수 있다.
    3. 패스워드를 쉐도우 패스워드로 감추는 것을 쉽게 할 수 있다.
        특정한 사용자가 특정한 시간에 특정한 장소에서만 로그인 할 수 있도록
        로그인 제한 설정을 가할 수 있다.
    4. PAM을 이용한 최대 로그인수 및 각 사용자가 생성할 수 있는 프로세스의 최대 개수등의
        제한 방법을 이용할 수 있다.
    
    
    
     
     
     
    16. 솔라리스 시스템상에서 telnet, ftp 배너제거를 위한 설정 문제 
    
    > 훈련 시스템 접속 주소 : 211.241.82.54 
    > 해당 아이디(ID) : level26 
    > 해당 패스워드(PW) : passwd=26 
    
    
    솔라리스 7 시스템에서 telnet, ftp 접속시 보여주는 배너의 내용에는 기본적으로 
    OS 버전이 나타난다. 이는 OS 버전별 취약점을 이용한 공격을 한층 쉽게 만드므로 
    배너에서 OS버전을 보여주지 않도록 설정하고자 한다. 
    
    telnet, ftp의 배너를 제거하도록 설정하시오. 
    
    =>
    
    솔라리스에 배너 설정 파일은 
    
    /etc/default/에 telnetd과 ftpd
    
    둘다 모두 빈 파일이다.
    배너제거
    
    #>echo "BANNER=\"\"" >> ftpd
    #>echo "BANNER=\"\"" >> telnetd
    #>finish
    password is balbal
    
    
    









     




    17. 주기적인 스크립트 실행을 통한 crontab 설정 문제
    Question 28 > 훈련 시스템 접속 주소 : 211.241.82.54 > 해당 아이디(ID) : level28 > 해당 패스워드(PW) : passwd=28 아파치 웹서버를 운영하고 있는 솔라리스 2.7 시스템에서 매주 일요일 04:00시마다 access_ log와 error_log를 백업받아 특정 폴더에 저장하려고 한다. 원래의 access_log, error_log는 백업받은 후 사이즈 0인 파일로 만들고, 로그파일의 제목은 access_log_YYYYMMDD, error_log_YYYYMMDD로 하여 디렉토리 /var/adm/httpd/에 저장한다. 위 작업을 루트권한으로 crontab 기능을 이용하여 수행하시오. 아파치 웹서버의 위치는 /usr/local/apache이다. 예) 2002년 6월 30일 일요일 04:00에 access_log, error_log 파일을 백업 (이 때 로그파일 내용은 2002년 6월 23일 04:00 ~ 2002년 6월 30일 04:00까지의 로그) - /usr/local/apache/logs/access_log 파일을 /var/adm/httpd/access_log_20020630로 백업하고 /usr/local/apache/logs/access_log 파일을 사이즈 0으로 만듬 - error_log도 access_log와 마찬가지 => 매주 일요일 4시에 백업을 할려고 한다. 문제에서도 crontab을 언급한다. crontab 옵션 -l : 리스트 보기 -e : crontab 수정 -r : crontab 제거 crontab 파일의 형식은 다음과 같습니다. Minutes Hours Date Month Day-of-Week command 문제에서느 매주 일요일 4시 이기때문에 0 4 * * 0 /home0/yspace/cron.sh 그리고 스크립트를 수정한다. vi /home0/yspace/cron.sh #!/bin/bash cp /usr/local/apache/logs/access_log /var/adm/httpd/access_log_`date +%Y%m%d` echo "" > /usr/local/apache/logs/access_log cp /usr/local/apache/logs/error_log /var/adm/httpd/error_log_`date +%Y%m%d` echo "" > /usr/local/apache/logs/error_log 저장하고 해당 스크립트에 실행 권한을 주어야 한다. chmod 755 /home0/yspace/cron.sh crontab comman 부분을 스크립트가 들어 있는 곳으로 설정한다. 스크립트에서 명령어 부분은 ' 이 아니라 ` 이다. passwd is KkYj9pognM
     
    18.John The Ripper를 통한 취약한 패스워드 점검 문제 
    
    > 훈련 시스템 접속 주소 : 211.241.82.54 
    > 해당 아이디(ID) : level29 
    > 해당 패스워드(PW) : passwd=29 
    
    
    시스템 관리자는 관리하고 있는 시스템의 사용자들이 취약한 패스워드를 사용하고 있는지 주기적으로 
    점검해야 한다. 취약한 패스워드 점검은 패스워드 점검툴을 이용하여 수행하고, 점검결과를 보고 
    해당 시스템의 사용자 중 패스워드가 취약한 사용자의 계정과 패스워드를 찾으시오. 
    단, 점검툴은 john the ripper(/usr/sbin/john)를 사용할 수 있다. 
    
    
    =>
    아무 디렉토리에서 john을 실행 시키면 에러가 뜬다 -_-;
    path에 등록 되어 있었는데 에러가;;
    #>cd /usr/sbin/john
    #>john /etc/shadow
    
    결과를 볼려면 
    #>john --show /etc/shadow
    bslle:common:11940::182:7:::
    
    1 password cracked, 10 left
    
    
    
     
     
     
     
    19. 시스템상의 특정 파일을 사용하는 불필요한 프로세스 제거 
    
    > 훈련 시스템 접속 주소 : 211.241.82.54 
    > 해당 아이디(ID) : level30 
    > 해당 패스워드(PW) : passwd=30 
    
    
    피해시스템을 분석하던 관리자는 /dev 디렉토리에서 침입자가 심어놓은 것으로 추정되는 파일을 발견했다. 
    이는 침입자의 악의적인 프로세스를 숨기기 위한 파일로 보이며 관리자는 이 파일을 찾아서 삭제하여야 한다. 
    그리고 이 파일을 사용하고 있는 프로세스가 있는지 확인하고 만약 존재한다면 그 프로세스를 종료시키시오.
    
    =>
    /dev 디렉토리에  누군가 심어놓았다면 만들어진 날짜가 최근일것이다.
    
    #>ls -alt | more
    ptyp
    ptyq
    /tmp
    
    위에 3개 파일이 가장 최근에 만들어진 파일이다.
    tmp는 빈 디렉토리이고 
    
    #>file ptyp
    ptyp : 아스키 텍스트
    #>file ptyq
    ptyq: 아스키 텍스트
    
    나머지 두개는 크기가 5, 6 정도인 아스키 텍스트 파일이다.
    
    #>cat ptyp
    bconn
    #>cat ptyq
    2222
    
    ptyp에는 "bconn"이란 텍스트가 있고 ptyq에는 "2222" 텍스트가 들어가 있다.
    
    ptyp 파일이 특정 프로세스 명을 숨기기 위한 파일로 사용된 것이라면
    
    bconn이란 파일을 찾아보아야 할것이다. 2222이란 파일은 존재하지 않았다.
    
    #>find / -name bconn 2>/dev/null
    /usr/bin/bconn
    
    ps -ef 에 결과에는 bconn이 나오지 않았다.
    
    #>lsof /usr/bin/bconn
    COMMAND	PID   USER ...
    bconn   6271  2001 ...
    
    lsof로 bconn을 사용하는 프로세스를 검색한 결과
    bcoon 자신이 돌고있다.
    
    여기서 보인다고 바로 프로세스 내리고 /dev에 파일을 삭제할려고하면 권한이 없다고 나온다 -_-;;
    나와있는 PID를 가지고 다시 lsof로 찾아보자
    
    #>kill -9 6271 
     문제에서 프로세스를 죽이고 
     프로세스를 숨기기 위한 파일을 삭제하라고 되어있다.
    
    여기에서는 파일을 삭제하려면 권한이 없다고 나온다.
    
    그래서
    
    #> echo /dev/null > /dev/ptyp
    #> echo /dev/null > /dev/ptyq
    
    해당 파일안에 내용을 지워버렸다.
    
    #>finish
    password is QhUGHJuQij
    
    
    
    
    
    
    
    
     
    #20. /etc/system 파일을 통한 session time out값 설정 문제 
    
    
       훈련 시스템에 접속하기 위한 아이디와 패스워드는 아래와 같습니다. 
    Question 32 
    > 훈련 시스템 접속 주소 : 211.241.82.54 
    > 해당 아이디(ID) : level32 
    > 해당 패스워드(PW) : passwd=32 
    
    
    평소 방화벽(Firewall)으로 운영되던 시스템의 네트워크 상태를 점검확인한 결과 사용자들이 session만 
    맺은 상태로 시스템 자원을 낭비하고 있다는 것을 발견하였다. 그래서 방화벽으로 운영하는 서버의 
    session time out값을 적당하게 유지함으로써 자원낭비를 막고 성능을 최적화시키려고 한다고 한다. 
    (이때 사용되는 session time out값은 200으로 설정을 하고 시스템 재부팅은 생략하도록 한다.) 
     
    =>
    vi /etc/system
    
    * session time out 설정
    set swip :tcpidletimeout=200
    
    
     
     
     
     
     
     
     
    21.root 사용자의 콘솔 접속과 로그인 세션값 설정 문제 
    
    > 훈련 시스템 접속 주소 : 211.241.82.54 
    > 해당 아이디(ID) : level33 
    > 해당 패스워드(PW) : passwd=33 
    
    
    원격 시스템에서 root 계정을 사용해서 웹서버 관리를 해오던 시스템 관리자는 최근 웹서버를 
    모니터링 한 결과, 누군가 지속적으로 스니핑(sniffing)과 함께 불법적으로 root 계정으로 시스템에 
    접속을 한 사실을 발견했다. 그래서 관리자는 원격시스템에서 root 계정을 통한 접속을 차단하고 
    일정시간동안 사용을 하지 않는 사용자들에 대해서는 session을 끊고자 한다. 
    (즉, login session 값을 10분(600초)으로 하고자 한다.) 
    
    =>
    로그인 세션 설정은 /etc/default/login 파일에서 다룬다
    
    vi /etc/default/login
    ...
    #CONSOLE=/dev/console 
    ...
    #TIMEOUT=300
    ...
    
    두 옵션이 주석처리가 되어있다.
    
    CONSOLE=/dev/console과 같이 설정된 경우 슈퍼유저로서 로그인은 단지 콘솔에서만 허용된다.
    
    두옵션 모두 주석을 풀고 timeout 값을 600으로 변경한다. timeout 값은 초단위로 계산한다.
     0~900 사이로 설정해야함.
    
    
    
     
     
     
    22.스택stack상에서 프로그램 실행 방지를 위한 설정 문제
    
    > 훈련 시스템 접속 주소 : 211.241.82.54 
    > 해당 아이디(ID) : level34 
    > 해당 패스워드(PW) : passwd=34 
    
    
    시스템상에서 버퍼 오버플로우(Buffer over flow) 공격은 입력 값의 길이를 올바르게 
    검사하지 않아 생기는 취약점으로 하나로 프로그램의 실행 흐름을 바꾸어 특정 코드가 
    실행되게 하는 기법이다. 취약점이 발표된 벤더(vender)의 패치를 적용하는 것도 
    해결방법이지만 스택상에서 프로그램이 실행되지 못하게 하는 것도 하나의 대책이 
    될 수 있다. 
    
    스택상에서 실행코드가 수행될 수 없도록 하면서 로그를 남기도록 설정하고 시스템 
    재부팅은 생략하도록 한다. 
    
    =>
    #> vi /etc/system
         set noexec_user_stack=1
         set noexec_user_stack_log=1
    
    stack execution 방지와 그에 따른 로깅을 위한 설정이다
    
        * #boot r
    o 버퍼오버플러우 공격에 대한 “stack smashing”공격을 디폴트로 차단시키기 위해
     실행 가능한 스택모드를 실행 불가능하도록 설정하여 운연하는것이 바람직하다.
     위에 두 라인을 추가하고 시스템을 재부팅하면 된다
    
    
     
     
     
     
     
     

    #23.비정상적인 사용자의 로그인 접속 기록 설정 문제 
    
    > 훈련 시스템 접속 주소 : 211.241.82.54 
    > 해당 아이디(ID) : level35 
    > 해당 패스워드(PW) : passwd=35 
    
    
    얼마 전부터 웹서버 시스템 계정을 알게된 불법적인 사용자가 시스템에 접속하고자 
    계속해서 무차별 패스워드 공격을 하는 것을 발견하고 이에 대한 대비책으로 
    시스템 접속시 5번 이상 잘못된 패스워드를 5번 이상 입력한 사용자에 대해 별도의 
    로그정보를 남길수 있도록 로그파일을 생성하고 해당 사용자 ID에 대해서는 일정 
    시간 동안 로그인을 할 수 없도록 시스템에 설정을 하시오. 
    
    (로그 파일 생성은 시스템에서 이미 정해진 로그 파일명을 사용하도록 하시오.) 
    
    =>
    #>vi /etc/default/login
    RETRIES = 5
    SYSLOG_FAILED_LOGINS=5
    시스템 접속시 5번 이상 패스워드 오류시에 
    
    
     
     
     
     
     
    24. 솔라리스 시스템상에서 ACLs를 통한 제한적인 파일 퍼미션 설정
    
    Question 38 
    > 훈련 시스템 접속 주소 : 211.241.82.54 
    > 해당 아이디(ID) : level38 
    > 해당 패스워드(PW) : passwd=38 
    
    
    오랫동안 Solaris 유닉스 시스템을 사용해오던 무선보안 연구소의 전산담당자는 
    파일서버에 있는 현재 진행되고 있는 프로젝트관련 파일(icert_solution.d)을 
    무선보안 연구팀내의 특정 사용자(itiger)에게만 별도의 쓰기 퍼미션을 줘서 
    프로젝트 수행을 하고자 한다. 
    
    이때 퍼미션 설정은 솔라리스에서 제공되는 ACLs을 사용하도록 하고 해당 파일은 
    /home0/cert/icert_solution.d이다. 
    
    조건) 
    - 소유자에게는 읽기/쓰기 권한 부여 
    - 그룹에게는 읽기 권한 부여 
    - 기타 사용자에게는 아무런 권한도 주지 않는다. 
    - itiger 계정에게는 읽기/쓰기 권한 부여 
    
    
    =>
    ACL을 사용하기위한 명령어는 
    getfacl : acl 설정을 보기 위한
    	-a
    	-d
    setfacl : acl 설정하기 위한 
    	-r ??
    	-m 추가/수정
    	-d 삭제
    
    설정 형대는 group:name:permision 이다.
    
    
    /home0/cert/icert_solution.d 에 파일에 퍼미션을 보자
    
    ls -al /home0/cert/icert_solution.d
    -rw-r--r-- 1 root other icert_solution.d
    
    조건중에 소유자 그룹 기타 사용자에 대한 설정은 chmod로 충분히 설정할수 있다.
    
    chmod 640 /home0/cert/icert_solution.d
    
    
    그리고 특정 계정에 설정을 하기위해서
    
    setfacl -m user:itiger:rw- /home0/cert/icert_solution.d
    
    
    
    
    password is pzX3oUQBq0
    
     
     
     
     
     
     
    25. inetd 서비스에 대한 syslog 메시지 처리 설정 문제 
    
    Question 40 
    > 훈련 시스템 접속 주소 : 211.241.82.54 
    > 해당 아이디(ID) : level40 
    > 해당 패스워드(PW) : passwd=40 
    
    
    사내에 있는 파일서버 사용자들의 telnet, ftp 등 접속에 대한 정보를 확인하고자 
    솔라리스 서버 세팅시 원격지 사용자로부터 요구되는 inetd 서비스에 대한 접속정보를 
    추적할 수 있도록 설정을 하시오. 
    
    이것은 원격지 클라이언트의 IP주소와 port번호를 로깅함으로써 행해지는데, 이것은 
    inetd가 'daemon' facility와 'notice' messages level에서만 /var/adm/inetdlogs 
    파일에 로깅을 하도록 한다. 
    
    조건) 
    - ftp 서비스에 대한 로깅과 디버깅 기능에 대한 옵션값 설정 
    - 원격지 클라이언트의 IP주소와 port번호에 대해 로깅을 하도록 inetd 서비스 
    옵션값 설정 
    - syslog 로깅처리를 위한 설정조건 
    facility ==> daemon 
    messages level ==> notice 
    /var/adm/inetdlogs 파일에 로깅 
    
    =>
    
    #>vi /etc/inetd.conf                 ->inetd.conf 파일 수정
    
    
    ftp     stream  tcp     nowait  root    /usr/sbin/tcpd  in.ftpd -ld   
    ->-ld 로깅과 디버깅 옵션 추가 
     #>vi /etc/syslog.conf               ->syslog.conf파일 수정
    daemon.notice /var/adm/inetdlogs    ->daemon.notice가 /var/adm/inetdlogs에 로깅 파일 저장
     
    #>ps
    #>kill -HUP syslog프로세스번호        ->syslog 프로세스 저장하고 재시작
    #>kill -9 inetd프로세스번호
     
    #>find / -name inetd |more
    #>/usr/sbin/inetd -s -t                     ->IP주소와 Port 번호 로깅 하도록 재시작함
     
    ---------------------------------------
    inetd 옵션
    -s 옵션은 inetd 를 stand-alone 모드로 실행
    -t 옵션은 TCP 로 접속하는 접속자의 IP 주소와 Port 정보를 로그에 기록
    로그 기록에는 유닉스의 syslog를 사용함.
     
     
     
     
     
     
    #26.ufsdump, ufsrestore를 이용한 백업 및 복구문제 
    
    > 훈련 시스템 접속 주소 : 211.241.82.54 
    > 해당 아이디(ID) : level41 
    > 해당 패스워드(PW) : passwd=41 
    
    
    UNIX 시스템의 /data 디렉토리 전체를 ufsdump 명령어를 사용하여 
    /data_bak/data.dump 파일로 가장 낮은 수준의 전체 백업을 하고, 백업한 데이터에서 
    /data/test.data 파일을 ufsrestore 명령을 사용하여 /data_bak/data.dump 파일로 
    복구하시오. 
    
    =>
    
    
    백업
    #> ufsdump 0uf /data_bak/data.dump /data
    복구
    #> ufsrestore svf /data_bak/data.dump /data/test.data 
     
     
     
     
     


    27.Apache 웹서버의 디렉토리 노출 취약점 제거 문제
    > 훈련 시스템 접속 주소 : 211.241.82.54 > 해당 아이디(ID) : level43 > 해당 패스워드(PW) : passwd=43 침해사고 피해시스템을 분석하는 중, 외부 IP(200.200.200.1)에서 지속적으로 telnet 접속했던 것이 확인되었다. 해당 피해시스템은 Apache 웹서버이고 웹서버의 option 설정은 디폴트로 되어 있었다. 조사결과 침입자는 웹서버의 디렉토리 리스팅 취약점을 이용하여 passwd, shadow 파일을 읽은 후 패스워드를 크랙한 것으로 추정된다. 비인가된 재접속을 막기 위하여 다음과 같이 보안조치를 하시오. 1. 웹서버 Option 설정변경 : Server-side includes(exec 기능 제외) 기능만 가능하도록 설정 2. 패스워드 정책변경 : passwd 유효기간을 8주, 8자리 이상으로 강제함 3. 공격IP에서의 접근제한 설정 : ipfilter를 이용하여 200.200.200.1에서의 접근을 제한 => 찾아보니 /usr/local/apache/ 가 있다. #> vi /usr/local/apache/conf/httpd.conf # # # This may also be "None", "All", or any combination of "Indexes", # "Includes", "FollowSymLinks", "ExecCGI", or "MultiViews". # # Note that "MultiViews" must be named *explicitly* --- "Options All" # doesn't give it to you. # 수전전 Options All 수정후 Options IncluedesNOEXEC 옵션 : Indexes FollowSymLinks MultiViews => 패스워드 정책 수정 #>vi /etc/default/passwd MAXWEKS=8 MINWEKS=0 /default value WARNWEEKS=1 /default value PASSLENGTH=8 => /etc/opt/ipf 밑에 ipf.conf 파일이 있다. #> vi ipf.conf block in from 200.200.200.1/32 to any
     
     
     





    28.crontab 명령어 실행에 대한 사용자 접근제어
    > 훈련 시스템 접속 주소 : 211.241.82.54 > 해당 아이디(ID) : level50 > 해당 패스워드(PW) : passwd=50 관리자 이씨는 솔라리스 서버를 관리하는 초보 관리자이다. 훌륭한 관리자가 되기 위해서는 서버의 설치 관리뿐만 아니라 보안에도 많은 신경을 써야한다는 것을 알게 되었다. 그래서 보안에 관한 공부를 하던 도중 해킹 기법 중에 일반 사용자가 root권한을 얻기 위해 crontab을 이용하여 race condition과 같은 해킹 기법을 할 수 있다는 것을 알고 root가 아닌 일반 사용자의 접근제어가 필요하다 는 사실을 알게 되었다. crontab 명령어를 사용하는데 있어 백업 관리자(dump_admin)를 제외한 일반 계정의 접근 권한을 제한 하시오. => cron에 대한 설정은 /etc/cron.d 에 있다. 원래는 cron.deny 와 cron.allow가 둘다 있어야 되지만 본 서버에는 cron.allow가 없다. 그래서 cron.allow를 만들어야 한다. #>vi cron.allow dump_admin 허용시킬 사용자만 추가 하고 저장
     
     
     








    29.리눅스 시스템의 소프트레벨 커널 튜닝
    > 훈련 시스템 접속 주소 : 211.241.82.54 > 해당 아이디(ID) : level51 > 해당 패스워드(PW) : passwd=51 리눅스에서 syn flooding 등 각종 공격에 대응하기 위하여 시스템의 kernel 튜닝을 하는 것이 좋다. 다음의 기능이 작동하도록 커널 튜닝을 하여라. * ping 요청에 반응하지 않도록 설정한다. * 소스 라우팅을 차단한다. * synflooding 에 대응하기 위해 syncookie를 설정한다. * ICMP Redirect를 차단한다. * 스푸핑, 소스 라우팅 및 리다이렉트된 패킷은 로그에 남긴다. * 패킷 포워딩을 차단한다. => * ping 요청에 반응하지 않도록 설정한다. sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1 # Broadcast로부터 오는 핑을 차단함(Smurt 공격을 차단함). sysctl -w net.ipv4.icmp_echo_ignore_all=1 # 모든 핑을 차단함 * 소스 라우팅을 차단한다. sysctl -w net.ipv4.conf.eth0.accept_source_route=0 sysctl -w net.ipv4.conf.lo.accept_source_route=0 sysctl -w net.ipv4.conf.default.accept_source_route=0 sysctl -w net.ipv4.conf.all.accept_source_route=0 # 스푸핑을 막기 위해 source route 패킷을 허용하지 않는다. 소스 라우팅을 허용할 경우 악의적인 공격자가 IP 소스 라우팅을 사용해서 목적지의 경로를 지정할 수도 있고, 원래 위치로 돌아오는 경로도 지정할 수 있다. 이러한 소스 라우팅이 가능한 것을 이용해 공격 자가 마치 신뢰받는 호스트나 클라이언트인 것처럼 위장할수 있는것이다. * synflooding 에 대응하기 위해 syncookie를 설정한다. sysctl -w net.ipv4.tcp_syncookies=1 * ICMP Redirect를 차단한다. sysctl -w net.ipv4.conf.eth0.accept_redirect=0 sysctl -w net.ipv4.conf.lo.accept_redirect=0 sysctl -w net.ipv4.conf.default.accept_redirect=0 sysctl -w net.ipv4.conf.all.accept_redirect=0 # icmp redirects를 허용하지 않는다. 만약 ICMP Redirect를 허용할 경우에는 공격자가 임의의 라우팅 테이블을 변경할 수 있게 되어 자신이 의도하지 않는 경로, 즉 공격자가 의도한 경로로 트래픽이 전달될 수 있는 위험이 있다. * 스푸핑, 소스 라우팅 및 리다이렉트된 패킷은 로그에 남긴다. sysctl -w net.ipv4.conf.eth0.log_martians=0 sysctl -w net.ipv4.conf.lo.log_martians=0 sysctl -w net.ipv4.conf.default.log_martians=0 sysctl -w net.ipv4.conf.all.log_martians=0 # 스푸핑된 패킷이나 소스라우팅, Redirect 패킷에 대해 로그파일에 정보를 남긴다. * 패킷 포워딩을 차단한다. sysctl -w net.ipv4.ip_forward=0 # 게이트웨이 서버가 아닌 이상 패킷을 포워딩 할 필요는 없다.
     


    30.sudo를 이용한 특정사용자에게 특정 명령어에 대한 권한 부여 > 훈련 시스템 접속 주소 : 211.241.82.54 > 해당 아이디(ID) : level52 > 해당 패스워드(PW) : passwd=52 IT 업체인 W사는 솔라리스 서버를 이용하여 사용자들의 홈페이지를 제작해주는 업체를 경영하였다. 1년 정도의 시간이 지나자 많은 사용자들이 서버에 입주했고 입주 업무가 폭주하다 보니 별도의 상담 업무만을 전담하는 직원을 두게 되었다. 상담원 이씨에게 사용자들의 id 개설 업무를 주었는데 팀장 황씨는 시스템의 다른 권한은 주고 싶지 않았다. 이에 대한 접근제어 역할을 제공하는 도구를 찾던 중 sudo라는 도구가 훌륭히 역할을 수행 할 수 있다는 것을 알았다. sudo를 이용하여 상담자 이씨(id: user_admin)에게 useradd 명령어에 대한 권한을 주도록 설정하라. => #> find / -name useradd 2>/dev/null /usr/sbin/useradd #> vi /etc/sudoers user_admin ALL=/usr/sbin/useradd #> finish ------------------------------------------------------------------------------------------------------ ▶ sudo 명령어 관리자가 특정 사용자에게 특정 명령을 root 계정으로 실행할 수 있는 권한을 부여한다. sudo 명령어 다음에 사용하고자 하는 명령어를 입력하면 sudo 유틸리티는 /etc/sudoers 파일내에 현재 호스트에서 그 명령어를 사용하는 것이 허가 되어 있는지를 확인한 후, 허가 되어 있으면 패스워드를 입력하여 사용하도록 한다. 한번 sudo 명령어를 사용하면 5분간 허용된 명령어를 사용할 수 있는 권한이 부여되고, 다시 sudo 명령어를 사용할 때마다 그 시간은 갱신된다. 시간이 지나면 다시 패스워드를 입력해야함. 예) sudo shutdown -g 5 -i 0 -y ★ 옵션 * -l : 사용에게 허용됐거나 금지된 명령어 목록 출력. * -v : 사용자의 타임스탬프 필드를 확인 후 타임아웃시간을 늘린다. * -k : 타임스탬프를 죽인다. (sudo 타이머 동작을 멈춤) * -b : sudo가 명령을 백그라운드로 실행하도록 함. ★ 구성파일 : /etc/sudoers * user, host, command 정의 가능. * user, host, command의 alias 지정 가능 * 구조 user host = commands user : login id, alias name host : hostname, alias host name commands : 콤마로 구분되는 명령어 리스트 예) rootALL = ALL : 루트 유저가 모든 호스트 상에서 모든 명령어 사용가능 heaven hostA = /usr/sbin/shutdown : heaven이라는 유저가 호스트 A상에서 shutdown 명령어 사용 가능
     
     
     
     
     
     
     
    31. ssh 인증키 인증설정 문제
    > 훈련 시스템 접속 주소 : 211.241.82.54 
    > 해당 아이디(ID) : level54
    > 해당 패스워드(PW) : passwd=54
    솔라리스 서버를 운영하고 있는 모 보안 업체에서 ssh를 사용한 터미널 접속만 
    허용하고 있다.
    현재 모든 사용자들이 해당 시스템 계정의 등록된 암호를 이용해 ssh를 접속하고
    있는데, 이 보안 업체에서는 좀더 안전한 ssh 인증을 위하여 인증키에 기반한
    ssh 인증 방식을 권장하고 있다.
    이 보안 업체가 제공하는 서버의 사용자로서 인증키 기반의 ssh 접속을 위해
    키 생성 및 공개키 배포를 하라.
    < 환경 및 필요 정보> 
    - 인증키는 ~/.ssh/id_rsa 로 생성한다.
    - 공개키를 배포할 곳의 도메인은 “PubHome" 이다.
    - PubHome의 ID는 pascal, Password는 cobol 이다.
    - 공개키를 배포할 때는 scp를 이용하라.

    =>
    인증키 생성
    #> ssh_keygen -t rsa
    Enter passphrase:
    Enter same passphrase again:
    #> scp /~/.ssh/id_rsa pascal@PubHome:.ssh/authorized_keys 
     
     
     
     
     
     
     
    32.시스템 파일의 퍼미션 및 소유권 보안설정 
    
    > 훈련 시스템 접속 주소 : 211.241.82.54 
    > 해당 아이디(ID) : level55 
    > 해당 패스워드(PW) : passwd=55 
    
    
    시스템을 초기화하는 과정에서 find 프로그램을 이용하여 보안상 문제가 될 수 있는 
    파일이나 디렉토리를 찾아 적당한 퍼미션으로 변경하는 것이 중요하다. 
    따라서 아래의 과정은 시스템 초기화과정에서 중요한 단계라 할 수 있는데, 
    각각의 단계에 따라 문제가 될 수 있는 파일 또는 디렉토리를 찾아 파일로 저장하라. 
    
    * 외부에서 쓰기 권한이 설정된 디렉토리와 파일을 찾아/tmp/write.txt 로 저장하라. 
    * 소유자가 없는 파일을 찾아 /tmp/no_own.txt 파일로 저장하라. 
    * suid / sgid 가 설정된 파일을 찾아 /tmp/suid.txt 파일로 저장하라. 
    
    
    =>
    
    #> find / -type f \( -perm -04000 -o -perm -02000 \) -print >  /tmp/suid.txt
    #> find / -type f \( -perm -04000 -o -perm -02000 \) -print | grep -v proc > /tmp/suid.txt
       *grep -v 명령으로 tmp와 proc이 관련된 디렉토리를 리스트에서 삭제
    #> find / -nouser -o -nogroup | grep -v '/tmp/' | grep -v '/proc/' > /tmp/no_own.txt
    #> find / -perm -20 -print > /tmp/write.txt
    
     
    
    # finish
    
     
     
     
     
     
     
    33.윈도우 NetBIOS 서비스 보안
    
    IDC(인터넷 데이터 센터)에 서버를 임대하여 사용중인 ekms21세기 회사가 있다. 
    시스템 관리자는 네트워크 환경을 통해 자신의 서버가 노출되고 있다는 것을 
    알게 되었다. 
    
    또한 동일 네트워크 내에서 불필요한 파일 공유 접속 시도가 빈번히 발생되어 
    이벤트 로그가 계속 가득차는 현상이 발생되고 있다. 
    
    Microsoft Windows 네트워크 환경을 통해 자신의 서버가 Browsing 되지 않고, 
    파일이나 프린터가 네트워크를 통해 공유되지 않도록 설정하시오. 
    
    포트 필터링 방법은 제외하며 네트워크 설정을 통해 Browsing 되지 않도록 설정한다. 
    
     
    =>
    
    
     
     
     
     
     
     
     
     
     
    34. 익명 보안 옵션
    
    1. 윈도우 서버는 기본적으로 원격 컴퓨터에서 익명 연결을 허용하고 있다. 
    익명 접근을 통해 서버에서 획득 가능한 정보들로는 로컬컴퓨터의 사용자명, 
    그룹정보, 공유자원 정보, 네트워크 정보 등이다. 
    이러한 위험에 대비하기 위해 원격 컴퓨터에서 익명 사용자의 접근을 
    차단하도록 레지스트리 값을 설정하여라. 
    =>
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa 에
    
    "restricAnonymous" 값을 "2"로 변경
    
    
    
    
    2. 바이러스, 해킹은 공유된 폴더나 관리용 폴더를 통해 전파되는 특성이 있다. 
    특히 관리용 폴더는 초기 공유 폴더 이름이 모든 컴퓨터 마다 동일하게 
    적용되어 있으므로 유추가 매우 쉽다. 시스템이 자동으로 
    관리 공유(IPC$,C$,D$등)를 만들지 않도록 레지스트리 값을 설정하여라. 
    =>
    
    
    [기본 공유 제거 - XP / 2003]
    "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters"
     - Value name : AutoShareServer
     - Data Type : DWORD
     - Value : 0(zero)
    
    [기본 공유 제거 - 2000]
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
     - Value name : AutoShareWks
     - Data Type : DWORD
     - Value : 0(zero)
    
    
    3. 익명 사용자가 서버 공유 폴더 명을 확인하지 못하도록 'c:\data'를 data이름을 
    가진 숨김 공유로 만들어라. 
     =>
    
    net share data$=c:\data 
    
    
    
    
    
     
     
     
     
    36. rpm 패키지 관리 명령을 이용한 변조된 파일 확인
    
    Linux 시스템의 패키지 관리 명령인 rpm 은 시스템 분석에 매우 유용한 도구이다. 
    특히 설치된 패키지의 변조된 파일을 분석하는데 사용될 수 있다. 
    
    rpm 명령을 사용하여 변조된 실행 파일을 찾도록 한다. 
    
     
    =>
    rpm -V 패키지명 으로 확인가능하다.
    
    그전에 실행 파일이 어떤 패키지에 있는지 확인해야한다.
    
    예를 들어 /bin/ls 가 어떤 패키지 인지 확인하려면
    
    #>rpm -qf /bin/ls
    coreutils-4.5.3-19 
    
    라도 나온다.
    
    #>rpm -v coreutils
    S.5....T /bin/ls
    
    현재 ls는 파일에 사이즈가 변경되었다. 그러면서 만들어진 시간과 md5 가 변경되었다는 것을 알수 있다.
    
    설명 :
    5 MD5 sum
    S File size
    L Symlink
    T Mtime
    D Device
    U User
    G Group
    M Mode (퍼미션&file type)
    바이너리파일(실행파일)이 크기가(S) 변경되었다면 시스템크래킹 여부와 전체적인 시스템 체크가 필요합니다.
    
     
     
     
     
     
     
    37. chkrootkit 을 이용한 rootkit 탐지
    
    chkrootkit 은 시스템을 검색하여 현재까지 잘 알려진 rootkit 을 탐지해 주는 
    도구로서 매우 간편하게 자신의 시스템에 rootkit, 특히 알려진 rootkit 이 
    설치되어 있는지 점검해 볼 수 있다. 
    
    또한 LKM 기반 rootkit 의 설치여부에 대해서도 진단을 해준다. 
    
    chkrootkit 을 설치해 보고 다음의 문제를 해결하도록 한다. 
    chkrootkit 프로그램은 /root 디렉토리에 위치해 있다. 
    
    운영 중인 Linux 시스템의 로그 중 일부가 삭제된 것을 발견하였다. 
    해킹 여부를 판단하기 위하여 chkrootkit 프로그램을 이용하여 해킹여부를 
    판단하고, 어떠한 피해가 있는지 확인하도록 한다. 
    
    - 공격자에 의해 변조된 시스템 명령은 어떤 것인가 ? 
    - 공격자에 의해 숨겨진 프로세스는 어떤 것인가 ? 
    
    주: chkrootkit, chkproc, lsof 를 이용해서 문제를 해결한다. 
    주: chkrootkit은 옵션을 사용하지 않고 실행시킨다 
     
    
    
    =>
    tar -zxvf 파일명으로 압축을 풀고 make 명령어서 설치를 한다.
    
    이제 하나씩 실행해본다.
    
    chkrootkit은 옵션을 사용하지 말라고 했지 때문에
    그냥 실행해본다.
    
    #>./chkrootkit > result
    
    result 를 열어서 보면 
    
    중간에
    
    chkecing `ps' ... INFECTED 
    ...
    라고 나왔다.
    
    더 밑으로 내려가 보자
    ...
    checking `lkm' ... You have  1 process hidden for ps command
    chkproc: Warning: Possible LKM Trojan installed
    ...
    
    여기에서 lkm 명령어가 변조되었다는 것과 숨겨진 프로세스가 하나 있다는 것이다.
    
    그렇다면 숨겨진 프로세스에 PID를 확인해보자
    
    #>./chkproc -v
    1776 is a Linux Thread, marking as such...
    1777 is a Linux Thread, marking as such...
    1778 is a Linux Thread, marking as such...
    1779 is a Linux Thread, marking as such...
    1810 is a Linux Thread, marking as such...
    PID 1863: not in ps output
    You have 1 process hidden for ps command
    
    숨경진 프로세스에 PID는 1863번이다. 그러면 1863 프로세스에 이름을 확인할 차례이다.
    
    
    #>lsof -p 1863
    COMMAND    PID
    bindshell 1863 root  ....
    bindshell 1863 root ....
    
    결과로 bindshell 이란 process가 숨겨져 있다.
    bindshell에 위치를 찾아보자
    만약에 bindshell이 find 명령어를 변조했다면 나오지 않을것이다.
    
    하지만 여기에서는 잘 찾아진다.
    #>find / -name bindshell 2>/dev/null
    /home/rootkit/bindshell
    
    /home/rootkit 디렉토리에서 확인을 해보자 나오지 않는다.
    
    이말은 ls 명령어도 변조되었기 때문이다.
    
    Q. 공격자에 의해 변조된 시스템 명령은 어떤 것인가 ? 
    ls ps
    
    Q 숨겨진 프로세스의 전체 경로는 무엇인가?
    /home/rootkit/bindshell
    
    
    반응형

    'case Computer :' 카테고리의 다른 글

    IE8의 굴욕? 파이어폭스, 시장 점유율로 MS 위협  (0) 2009.04.07
    LKM 루트킷(Rootkit) 탐지방법  (0) 2009.04.07
    리버스 텔넷(Revers telnet)  (0) 2009.04.01
    mysql my.cnf  (0) 2009.03.31
    httpd.conf 내용  (0) 2009.03.31

    댓글

Designed by Tistory.