본문 바로가기

Computer Engineering/LINUX

LINUX#2 - 다시 한 번 시작해 봅시다 ^^

기본적으로 만들어 놓은 OS 를
D: 아래와 같이 폴더를 생성하자

폴더 이름은 2011-10-주말 LINUX

위 OS 파일은 Apache , PHP,  MY-SQL 이 설치
root // itclass <- 최고 관리자 권한 아이디와 암호
doom// itclass <- 강사가 만들어 놓은 계정
user01 // itclass <- 강사가 만들어 놓은 계정

우선 APM 확인
# ps-ef | grep httpd
# ps-ef | grep mysqld
# mysql -u root -p
Password : itclass

PUTTY 192.168.10.129 에 접속을 하자
PUTTY 접속시에 UTF-8 으로 설정을 해주고 완료가 되면 네트워크 설정으로 넘어가보자!!

VMWare 에서
Network Apaptor Add (eth 1 )  Bridge 로 선택을 해준다.

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth1

vi 를 이용해서
# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
DEVICE=eth1
BOOTPROTO=static  //고정 IP 를 사용한다는 것이다.
ONBOOT=yes
IPADDR=172.16.10.xxx  // 자신의 IP
NETMASK=255.255.0.0
HWADDR=00:0c:29:f4:e4:3a

를 넣어주면 된다. 넣어준뒤에 저장을 하고

[root@localhost ~]# service network restart
=> 다시 재부팅을 해주자

아래와 같은 결과를 얻을 수 있다.

인터페이스 eth0 (을)를 종료 중:                            [  OK  ]
인터페이스 eth1 (을)를 종료 중:                            [  OK  ]
loopback 인터페이스를 종료 중:                             [  OK  ]
loopback 인터페이스를 활성화 중:                           [  OK  ]
eth0 인터페이스 활성화 중:
eth0에 관한 IP 정보를 얻고 있음... 완료.
                                                           [  OK  ]
eth1 인터페이스 활성화 중:                                 [  OK  ]
[root@localhost ~]#

[root@localhost ~]# telnet 172.16.10.250     // // 강사 서버에 접속 확인 !!
Trying 172.16.10.250...
Connected to 172.16.10.250 (172.16.10.250).
Escape character is '^]'.
CentOS release 5.5 (Final)
Kernel 2.6.18-194.el5 on an i686
login: root
Password:
Last login: Sat Oct 15 15:09:55 from 172.16.10.137
[root@localhost ~]# wall hi

Broadcast message from root (pts/2) (Sat Oct 15 15:10:03 2011):

hi
[root@localhost ~]# exit
logout

[참고] 방화벽 설정 제거
#iptables -L <- 모두 확인
#iptables -F <- 모두 제거
#iptables -L <- 다시 제거가 잘 되었는지 확인
#service iptables save

[참고] 일반 문서는 "스프링노트"를 이용하시면 편할듯 ^^
가입만하면 이용가능하고 실시간으로 문서가 저장됩니다.

[보안프로그램 활용]
Check Root Kit : 탐지만 하고 해결은 하지 못하는 프로그램이다.
백도어의 경우에는 뒷문으로 들어가서 상위 권한을 획득하든 데이터를 파괴하든 뒤쪽으로 들어가는 관리자가 이용을 못하는 ...
RootKit : 백신이라고 하면 좋은 의미로 사용이 된다. 그런데 Root Kit 은 쉽게 이야기 해서 Root 를 공격해서 뚫는 나쁜 뜻을 갖고 있다.

케빈 미트(?) => 일본 사람이 잡았다. 중요 기관의 정보를 빼가는 것을 찾아내서 해결을 했다. 그런 사람을 해커를 이야기 하는 것이다. 크래커는 어떤 시스템의 정보를 몰래빼가서 ... 나쁜 뜻을 의미한다. 해커는 특정문제가 있으면 알려주고 지시하는 ... 좋은 역할을 한다.

시스템이 해킹당한 상태?
=> 이미 끝난 상태라고 생각하면 된다. RootKit 루트를 공격하는 프로그램을 묶어 놓은 것이다. Linux 같은 경우에는 수만개가 있어서 탐색한다는 것은 거의 불가능하다고 본다.

가장 먼저 보고를 해야 한다. 어떤 작업이 우선이 아니다. 우리의 입장에서는 보고를 해야 한다. 회사마다 정책이 있기때문에 정책에 맞게 운영을 해야한다. 보안 관리자 시스템 개발자는 전화를 24시간 켜놓는 경우가 이 같은 이유다.

시스템이 해킹 당한 상태라고 해도 그 공격내용을 분석 -> 다음 번에 들어 올경우에 막는 것이 시스템 보안 관리자의 의무라고 생각한다.

CHKRootKit 공식사이트
=> 현재 버전은 0.49 //
설치를 합시다

[root@localhost ~]# mkdir /chkrootkit
[root@localhost ~]# cd /chkrootkit/
[root@localhost chkrootkit]# wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
--2011-10-15 15:49:57--  ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
           => `chkrootkit.tar.gz'


[root@localhost chkrootkit]# ls -al
합계 52
drwxr-xr-x  2 root root  4096 10월 15 15:50 .
drwxr-xr-x 28 root root  4096 10월 15 15:49 ..
-rw-r--r--  1 root root 39421 10월 15 15:50 chkrootkit.tar.gz
[root@localhost chkrootkit]# tar -zxvf chkrootkit.tar.gz
chkrootkit-0.49
chkrootkit-0.49/chkrootkit.lsm
chkrootkit-0.49/README.chkwtmp
chkrootkit-0.49/COPYRIGHT
chkrootkit-0.49/Makefile
chkrootkit-0.49/chkutmp.c
chkrootkit-0.49/ifpromisc.c
chkrootkit-0.49/chkrootkit
chkrootkit-0.49/ACKNOWLEDGMENTS
chkrootkit-0.49/check_wtmpx.c
chkrootkit-0.49/chkdirs.c
chkrootkit-0.49/README.chklastlog
chkrootkit-0.49/chklastlog.c
chkrootkit-0.49/strings.c
chkrootkit-0.49/README
chkrootkit-0.49/chkproc.c
chkrootkit-0.49/chkwtmp.c
[root@localhost chkrootkit]# cd chkrootkit-0.49/
[root@localhost chkrootkit-0.49]# pwd
/chkrootkit/chkrootkit-0.49
[root@localhost chkrootkit-0.49]# ls
ACKNOWLEDGMENTS  README             check_wtmpx.c  chkproc.c       chkutmp.c    strings.c
COPYRIGHT        README.chklastlog  chkdirs.c      chkrootkit      chkwtmp.c
Makefile         README.chkwtmp     chklastlog.c   chkrootkit.lsm  ifpromisc.c
[root@localhost chkrootkit-0.49]# make sense
gcc -DHAVE_LASTLOG_H -o chklastlog chklastlog.c
gcc -DHAVE_LASTLOG_H -o chkwtmp chkwtmp.c
chkwtmp.c: In function ‘main’:
chkwtmp.c:95: warning: incompatible implicit declaration of built-in function ‘exit’
gcc -DHAVE_LASTLOG_H   -D_FILE_OFFSET_BITS=64 -o ifpromisc ifpromisc.c
gcc  -o chkproc chkproc.c
gcc  -o chkdirs chkdirs.c
gcc  -o check_wtmpx check_wtmpx.c
gcc -static  -o strings-static strings.c
gcc  -o chkutmp chkutmp.c
[root@localhost chkrootkit-0.49]# ls
ACKNOWLEDGMENTS  README.chklastlog  chkdirs       chkproc         chkutmp    ifpromisc
COPYRIGHT        README.chkwtmp     chkdirs.c     chkproc.c       chkutmp.c  ifpromisc.c
Makefile         check_wtmpx        chklastlog    chkrootkit      chkwtmp    strings-static
README           check_wtmpx.c      chklastlog.c  chkrootkit.lsm  chkwtmp.c  strings.c

[!!참고!! 어디에서나 먹히는 만능키]
Shift + Insert : 붙여넣기
Shift + PageDown(Up) : 페이지 아래로(위로)

기본적으로 chkrootkit 이 있다. 파일명을 확인해 보자.
[root@localhost chkrootkit-0.49]# file chkrootkit
chkrootkit: Bourne shell script text executable

다음으로
ifpromisc
네트워크 인터페이스가 promiscuous(무차별) 모드인지 여부를 체크한다. 인터페이스가 promisc 모드인 경우 스니핑이 가능하기 때문에 반드시 점검해야 한다.
=> 무처별 모드로 선언이 되어있으면 네트워크의 패킷이나 정보를 다른 사람에게 노출 시키는 것이다. 네트워크 하드느 무처별 모드로 되어있으면 안된다.

[root@localhost chkrootkit-0.49]# ifconfig eth1
eth1      Link encap:Ethernet  HWaddr 00:0C:29:F4:E4:3A
          inet addr:172.16.10.144  Bcast:172.16.255.255  Mask:255.255.0.0
          inet6 addr: fe80::20c:29ff:fef4:e43a/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:87878 errors:0 dropped:0 overruns:0 frame:0
          TX packets:244 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:7566094 (7.2 MiB)  TX bytes:28121 (27.4 KiB)
          Interrupt:75 Base address:0x2080
=> 기본적으로 무차별 설정이 안 되어있다.

[root@localhost chkrootkit-0.49]# ifconfig eth1 promisc         // 이렇게 하면 무차별 설정
[root@localhost chkrootkit-0.49]# ifconfig eth1
eth1      Link encap:Ethernet  HWaddr 00:0C:29:F4:E4:3A
          inet addr:172.16.10.144  Bcast:172.16.255.255  Mask:255.255.0.0
          inet6 addr: fe80::20c:29ff:fef4:e43a/64 Scope:Link
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1 // 무차별 모드 확인
          RX packets:88925 errors:0 dropped:0 overruns:0 frame:0
          TX packets:245 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:7663733 (7.3 MiB)  TX bytes:28175 (27.5 KiB)
          Interrupt:75 Base address:0x2080

[root@localhost chkrootkit-0.49]# lastlog
사용자명         포트     ~로부터          최근정보
root             pts/0    192.168.10.1     토 10월 15 14:53:19 +0900 2011
bin                                        **한번도 로그인한 적이 없습니다**
daemon                                     **한번도 로그인한 적이 없습니다**
adm                                        **한번도 로그인한 적이 없습니다**
lp                                         **한번도 로그인한 적이 없습니다**
sync                                       **한번도 로그인한 적이 없습니다**
shutdown                                   **한번도 로그인한 적이 없습니다**
halt                                       **한번도 로그인한 적이 없습니다**
mail                                       **한번도 로그인한 적이 없습니다**
news                                       **한번도 로그인한 적이 없습니다**
uucp                                       **한번도 로그인한 적이 없습니다**
operator                                   **한번도 로그인한 적이 없습니다**
games                                      **한번도 로그인한 적이 없습니다**
gopher                                     **한번도 로그인한 적이 없습니다**
ftp                                        **한번도 로그인한 적이 없습니다**
nobody                                     **한번도 로그인한 적이 없습니다**
nscd                                       **한번도 로그인한 적이 없습니다**
vcsa                                       **한번도 로그인한 적이 없습니다**
rpc                                        **한번도 로그인한 적이 없습니다**
mailnull                                   **한번도 로그인한 적이 없습니다**
smmsp                                      **한번도 로그인한 적이 없습니다**
apache                                     **한번도 로그인한 적이 없습니다**
oprofile                                   **한번도 로그인한 적이 없습니다**
pcap                                       **한번도 로그인한 적이 없습니다**
ntp                                        **한번도 로그인한 적이 없습니다**
dbus                                       **한번도 로그인한 적이 없습니다**
avahi                                      **한번도 로그인한 적이 없습니다**
hsqldb                                     **한번도 로그인한 적이 없습니다**
rpcuser                                    **한번도 로그인한 적이 없습니다**
sshd                                       **한번도 로그인한 적이 없습니다**
haldaemon                                  **한번도 로그인한 적이 없습니다**
avahi-autoipd                              **한번도 로그인한 적이 없습니다**
xfs                                        **한번도 로그인한 적이 없습니다**
gdm                                        **한번도 로그인한 적이 없습니다**
sabayon                                    **한번도 로그인한 적이 없습니다**
doom                                       **한번도 로그인한 적이 없습니다**
user01                                     **한번도 로그인한 적이 없습니다**
mysql                                      **한번도 로그인한 적이 없습니다**

(03) chklastlog
lastlog 파일의 삭제 여부를 체크한다. lastlog 파일은 모든 계정들의 마지막 접근 시각과 IP 주소를 저장한 파일로 lastlog를 실행했을 때의 결과에 대한 정보를 저장하고 있다

[root@localhost chkrootkit-0.49]# cd /var/log
[root@localhost log]# pwd
/var/log
[root@localhost log]# ls
Xorg.0.log       boot.log        cron.1   mail        prelink           setroubleshoot
Xorg.0.log.old   boot.log.1      cups     maillog     rpmpkgs           spooler
acpid            brcm-iscsi.log  dmesg    maillog.1   rpmpkgs.1         spooler.1
anaconda.log     btmp            faillog  messages    samba             tallylog
anaconda.syslog  conman          gdm      messages.1  scrollkeeper.log  wtmp
anaconda.xlog    conman.old      lastlog  pm          secure            yum.log      // <- 이 파일 때문에
audit            cron            libvirt  ppp         secure.1          yum.log.1

[root@localhost log]# mv lastlog /                 // 이동시키면
[root@localhost log]# lastlog
/var/log/lastlog: 그런 파일이나 디렉토리가 없음        // 확인이 안된다.

[root@localhost log]# last
root     pts/0        192.168.10.1     Sat Oct 15 14:53   still logged in
// 누가 마지막에 접속을 했는지 확인 할 수 있다.
reboot   system boot  2.6.18-194.el5   Sat Oct 15 14:52          (01:11)
root     pts/0        192.168.10.1     Sat Oct 15 14:33 - down   (00:15)
root     tty1                          Sat Oct 15 14:28 - down   (00:20)
root     tty1                          Sat Oct 15 14:26 - 14:28  (00:02)
reboot   system boot  2.6.18-194.el5   Sat Oct 15 14:25          (00:24)
root     tty1                          Sat Jun 26 15:48 - down   (00:00)
reboot   system boot  2.6.18-194.el5   Sat Jun 26 15:47          (00:01)
root     pts/1        localhost        Sat Jun 26 15:45 - 15:45  (00:00)
root     pts/0        192.168.10.1     Sat Jun 26 15:41 - down   (00:04)
root     tty1                          Sat Jun 26 15:40 - down   (00:05)
reboot   system boot  2.6.18-194.el5   Sat Jun 26 15:39          (00:06)
root     pts/0        192.168.10.1     Sat Jun 26 14:17 - down   (00:02)
reboot   system boot  2.6.18-194.el5   Sat Jun 26 14:13          (00:06)
root     pts/3        192.168.10.1     Sat Jun 26 11:49 - 12:46  (00:56)
root     pts/2        192.168.10.1     Sat Jun 26 10:50 - down   (03:21)
root     pts/1        :0.0             Sat Jun 26 10:47 - down   (03:24)
root     :0                            Sat Jun 26 09:55 - down   (04:16)
root     :0                            Sat Jun 26 09:55 - 09:55  (00:00)
reboot   system boot  2.6.18-194.el5   Sat Jun 26 07:34          (06:37)
root     pts/1        :0.0             Sat Jun  5 10:30 - down   (00:08)
root     :0                            Sat Jun  5 10:30 - down   (00:09)
root     :0                            Sat Jun  5 10:30 - 10:30  (00:00)
reboot   system boot  2.6.18-194.el5   Sat Jun  5 10:29          (00:10)
root     pts/1        :0.0             Sat Jun  5 09:58 - down   (00:02)
root     :0                            Sat Jun  5 09:58 - down   (00:02)
root     :0                            Sat Jun  5 09:58 - 09:58  (00:00)
reboot   system boot  2.6.18-194.el5   Sat Jun  5 09:56          (00:03)
root     pts/2        192.168.10.1     Fri Jun  4 20:57 - down   (00:06)
root     pts/1        :0.0             Fri Jun  4 20:57 - down   (00:07)
root     :0                            Fri Jun  4 20:53 - down   (00:11)
root     :0                            Fri Jun  4 20:53 - 20:53  (00:00)
reboot   system boot  2.6.18-194.el5   Fri Jun  4 20:52          (00:12)
reboot   system boot  2.6.18-194.el5   Sat Jun  5 05:45          (-8:-55)

wtmp begins Sat Jun  5 05:45:56 2010

(05) chkproc
ps 파일 변조 및 LKM(Loadable Kernel Module) 트로이안 여부를 체크한다.
chkproc은 매우 유용하므로 원리와 사용 방법을 확실히 알고 있는 것이 좋다.
=> Process 는 proc 안에 상태정보안에서 확인할 수 있다.

[root@localhost log]# cd /proc/
[root@localhost proc]# ls -F
1/     2167/   248/   3131/  3491/  3688/  510/       devices      keys        slabinfo
10/    2175/   249/   3150/  3505/  3697/  519/       diskstats    kmsg        stat
11/    2176/   2739/  3151/  3518/  3700/  545/       dma          loadavg     swaps
175/   2177/   2741/  3158/  3535/  3744/  578/       driver/      locks       sys/
178/   2180/   2773/  3164/  3539/  3746/  6/         execdomains  mdstat      sysrq-trigger
180/   2183/   2776/  3173/  3540/  3747/  7/         fb           meminfo     sysvipc/
1872/  2186/   2854/  3200/  3541/  3749/  8637/      filesystems  misc        tty/
1873/  2202/   2885/  3229/  3542/  4/     8645/      fs/          modules     uptime
1938/  2208/   2891/  3254/  3543/  467/   8646/      ide/         mounts@     version
1940/  2209/   2925/  3268/  3598/  4851/  8648/      interrupts   mpt/        vmcore
1942/  24274/  3/     3287/  3599/  497/   acpi/      iomem        mtrr        vmstat
1944/  24275/  3017/  3300/  3677/  498/   buddyinfo  ioports      net/        zoneinfo
1946/  24276/  3042/  3409/  3679/  499/   bus/       irq/         partitions
2/     245/    3048/  3433/  3683/  5/     cmdline    kallsyms     schedstat
2116/  246/    3070/  3447/  3684/  502/   cpuinfo    kcore        scsi/
2133/  247/    3116/  3454/  3687/  503/   crypto     key-users    self@

process ID 와 똑같은 곳에 상태정보가 들어가 있다.
[root@localhost proc]# ps -ef | grep syslog
root      2773     1  0 14:52 ?        00:00:00 syslogd -m 0
root     27158  3749  0 16:06 pts/0    00:00:00 grep syslog

=> 각 프로세스마다 프로세스 명에 상태정보가 들어가 있다. 2773

[root@localhost proc]# cd 2773
[root@localhost 2773]# ls
attr     coredump_filter  environ  io        maps    mountstats  root       stat    task
auxv     cpuset           exe      limits    mem     oom_adj     schedstat  statm   wchan
cmdline  cwd              fd       loginuid  mounts  oom_score   smaps      status
=> 상태정보를 확인 할 수 있다.

PROC 안에 들어있는 디렉토리들은 ... Proc 안에 있는 ... 만약 시스템이 다운되면 이 안에 정보가 아무것도 없다. 그래서 이 녀석을 변조하는 것은 어렵다.

이제 한 번 돌려보자!!
[root@localhost chkrootkit-0.49]# ./chkrootkit
.
.
.
Checking `OSX_RSPLUG'... not infected
=>
테스트 결과 이상이 없다. 그 결과를 보고 해주어야 한다.

변조된 파일이나 루트킷이 설치된 것을 확인 되었을 경우?
=> 깨끗한 원본으로 교체를 해주어야 한다. 그리고 원인 분석을 해주어야 한다. 원인 분석이라는 것은 로그를 살펴보는 것이다. 특정 코드가 심어져 있는 것을 확인 하는 것이다.ABC 라는 새로운 공격은 처음에는 뚫릴 것이다. 집에서 사용하는 백신프로그램은 기존에 공격해온 프로세스, 공격 원리들을 차단하기 위해서 설치 하는 것이다. 3.4 DDoS 도 처음에는 못 막았다. 그런데 이제는 어느정도 막을 수 있다. 인터넷 대란도 마찬가지이다. 로그분석!!

여기에서 중요한 것을 짚고 넘어가자!!
먼저, 가장 중요한 것 '보고'
RootKit 이라는 것은 나쁜 것이다. 나쁜 도구들
백도어? 리눅스라는 운영체제인데 이안에 여러 프로그램이 있을 것이다. 기본적으로 어떤 것은 되어 있고 어떤 것으 안되어 있다. 그래서 시스템 관리자는 이것을 알고 세팅을 해주어야 한다. 누군가가 공격을 하려고 한다. 뚫려있는 특정 개구멍(Port) 를 이용해서 몰래 들어간다. 트로이 목마 ) 윈도우즈에서 System32 안에 많이 있는 것을 알 수 있다. tory.exe 누군가 넣어 놓은 것이다. 맘대로 제어를 하려고 PC 같은 경우에도 개인이 관리를 잘 해주어야 한다.

강사님 PC 에 AhnLab V3 Lite 하나를 써오고 있다고 한다.

무차별 모드 해제를 해보자!!
[root@localhost /]# ifconfig eth1 -promisc
[root@localhost /]# ifconfig eth1
eth1      Link encap:Ethernet  HWaddr 00:0C:29:F4:E4:3A
          inet addr:172.16.10.144  Bcast:172.16.255.255  Mask:255.255.0.0
          inet6 addr: fe80::20c:29ff:fef4:e43a/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1        // 해지가 되었다.
          RX packets:163104 errors:0 dropped:0 overruns:0 frame:0
          TX packets:256 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:39330557 (37.5 MiB)  TX bytes:28769 (28.0 KiB)
          Interrupt:75 Base address:0x2080

- RootKit Hunter -  //

  Performing trojan specific checks
    Checking for enabled xinetd services                     [ Warning ]
=> 트로이 목마를 체크했는데 xinetd 가 enable 되어 있어서 이와 같은 문제가 생긴다고 한다.
루트킷 헌터가 돌 때에 활성화 되있는 분을 체크한다. xinetd 는 좋지 않다? 텔넷같은 경우에는 ID,P/W 가 노출이 된다. 화면에 다 나타나게 된다. 그 만큼 telnet 보안이 취약하다. 기타 여러가지 정보를 확인할 수 있다. 네트워크 인터페이스 장치 확인. 부팅과 관련된 정보를 체크한다. SSH 도 체크한다. 이 프로그램은 기본적으로 어떤 DIR 은 기본적으로 있어야 하는 프로그램이 있다. 그게 잘 못된 경우에 체크하는 것이다.

[참고] xinetd 데몬은 슈퍼데몬이라고 해서 telnet, rsync, ktalk 등등
/etc/xinetd.d/ 이 안에 있는 녀석들을 제어한다.

데몬은 xinetd 이다.

그래서 # service xinetd restart 하게 되면
/etc/xinetd.d/ <- 이 안에 있는 녀석들이 재시작하게 된다.

그래서 하나의 데몬으로 많은 서비스를 관리한다고 해서 수퍼데몬이라고 한다.

혼돈하지 말자!
프로세스 구동방식에는 xinetd 방식과 standalone 방식의 두 가지 방식으로 구동된다.









'Computer Engineering > LINUX' 카테고리의 다른 글

LINUX#2 - SAMBA  (0) 2011.10.22
LINUX#2  (0) 2011.10.16
LINUX#2 - IDS  (0) 2011.08.01
LINUX#2 - 방화벽  (0) 2011.07.28
LINUX#2 - Apache(2)  (0) 2011.07.28