본문 바로가기
컴퓨터 일반/운영체제

utmp, wtmp

by ITPro 2010. 8. 11.

1. 시스템의 기본로그파일에 대하여

시스템에 접속을 하거나 하고있는 정보를 기록하는 파일이 있습니다. 해커가 침입을 하고난 후에는 자신의 접속정보를 삭제하는 작업을 하게되는데 아래의 파일에서 자신의 접속로그를 삭제하게된다.

 

/var/run/utmp  또는 /var/adm/utmp

/var/log/wtmp 또는 /var/adm/wtmp

/var/log/lastlog 또는 /var/adm/lastlog

 

2. utmp 파일

먼저 utmp에 대해서 알아보겠습니다. 이 파일은 현재시스템에 접속해 있는 사용자의 정보를 가지고 있습니다. 시스템은 사용자가 remote로 접속을 하면 먼저 이 파일에 기록을 하고 로그아웃을 할 때에 기록해둔 정보를 삭제합니다.

그리고 이 파일의 구성요소를 결정하는 파일은 /usr/include/utmp.h 에 정의되어 있습니다.

struct utmp {
        char    ut_user[32];            /* User login name */
        char    ut_id[14];              /* /etc/inittab id- IDENT_LEN in init */
        char    ut_line[32];            /* device name (console, lnxx) */
        short   ut_type;                /* type of entry */
        pid_t   ut_pid;                 /* process id */
        struct exit_status {
            short       e_termination;  /* Process termination status */
            short       e_exit;         /* Process exit status */
        } ut_exit;                      /* The exit status of a process
                                         * marked as DEAD_PROCESS.
                                         */
        time_t  ut_time;                /* time entry was made */
        char    ut_host[64];       /* host name same as MAXHOSTNAMELEN*/
}; 

이 파일은 보통 바이너리형태로 되어 있기 때문에 strings라는 명령어를 사용하여 다음과 같이 내용을 볼 수 있습니다.

$ strings utmp | more

system boot
run-level 3
sysconfig
update
LOGIN
cons
console
sac -t 300
PM00
root
console
ttyp1
ttyp1
8:0.0
webadmin
ttyp4
ttyp4
168.126.62.90
webadmin
ttyp3
ttyp3

이 파일의 정보를 이용하는 명령어는 다음과 같습니다.

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

 

3. wtmp 파일

 다음으로 wtmp에 대해서 알아보자. 이 파일에는 처음부터 접속했던 모든 사용자의 로그인정보와 로그아웃정보를 가지고 있습니다.  이파일은 삭제해주지 않으면 계속 누적이 되므로 정기적으로 백업을 받아 두든지 아니면 불필요한 정보를 삭제하든지 해야합니다.

이 파일에 기록되는 정보는 utmp.h에 있는 내용에 ut_time이추가되어 로그아웃시의 시간이 추가기록됩니다. 물론 이 파일의 정보를 보는 방법은 last라는 명령어로 볼 수있으며 wtmp와 관련된 명령어에는 다음과 같은 것들이 있습니다.

 

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

 

4. lastlog 파일

다음으로 lastlog에 대해서 알아보겠습니다. 이 파일에는 가장최근에 로긴한 정보를 저장하고 있습니다.

이 파일또한 last라는 명령어로 조회를 해 볼 수 있으며 기록되는 정보를 정의하는 파일은 /usr/include/lastlog.h에 다음과 같이 정의되어 있습니다.

struct lastlog {
        time_t  ll_time;
        char    ll_line[LL_LINELEN];
        char    ll_host[LL_HOSTLEN];            /* same as in utmp */
};

 

5. 로그파일과 로그기록삭제

자, 그럼 이쯤에서 이파일들의 보안에 대해서 언급해 보도록 하겠습니다. 만약 자기가 다른 시스템에 불법으로 침입했다면 이들 파일에 기록된 자신의 정보를 삭제하고자 할 것입니다. 그런데 이파일에서 일부정보를 삭제하려면 write 퍼미션이 있어야 합니다. 그래서 이들 파일의 퍼미션이 또 문제가 되는 것이며, 대부분의 시스템에는 이들 파일에 다음과 같은 퍼미션을 설정하고 있습니다.

 

[webserver:/var/adm 78 ] ls -l utmp

8 -rw-r--r--   1 root     adm         7332 12월 1일 19:40 utmp

[webserver:/var/adm 79 ] ls -l wtmp

84624 -rwxr-xr-x   1 root     system   86593728 12월 1일 19:40 wtmp*

[webserver:/var/adm 80 ] ls -l lastlog

160 -rw-r--r--   1 root     adm       153132 12월 1일 19:40 lastlog

 

위에서 보시는 바와 같이 utmp와 lastlog는 644로 되어 있기 때문에 root 외에는 파일을 조작할 수 없으며 wtmp에는 755로 설정되어 있기 때문에 당연히 root 외에는 조작이 불가능합니다. 주의할 것은 이들 파일의 펴미션이 혹시 변경되지 않았나를 정기적으로 확인해 봐야한다는 것입니다.

이들 파일속에서 침입한 자신의 로그기록을 삭제해주는 유틸리티가 있는데 zip2라는 프로그램입니다.

수작업으로 이들 파일의 접속정보를 삭제할 수도 있으나 우린 좀더 편리한 것을 사용할 수 있는 방법을 사용해보겠습니다.

위에서 언급한 zap2.c에 대해서 설명을 하려합니다. 이 파일을 컴파일하여 사용하도록 해야합니다.

 

#define WTMP_NAME "/var/adm/wtmp"

#define WTMP_NAME "/var/adm/utmp

#define WTMP_NAME "/var/adm/lastlog

 

이 파일의 처음에 나오는 부분을 해당시스템에 맞게 수정하여야합니다.

 

사용하는 방법은 간단합니다.. 다음과 같이....킥킥....

 

$./zap2 webmaster

 

6. 또다른 로그기록삭제 프로그램

cloak1.c, invisible, mme.c, sunwt.c, zip.c, lled.c, wted.c 등등...

반응형

바로가기