/chroot/lib/ /chroot/etc/

Similar documents
6주차.key

1장. 유닉스 시스템 프로그래밍 개요

제1장 Unix란 무엇인가?

Microsoft PowerPoint - 09-Pipe

untitled

PowerPoint 프레젠테이션

Microsoft PowerPoint - lab14.pptx

PowerPoint 프레젠테이션

ABC 11장

제1장 Unix란 무엇인가?

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

슬라이드 1

PowerPoint 프레젠테이션

Chap04(Signals and Sessions).PDF

좀비프로세스 2

10.

<4D F736F F F696E74202D BDC3B1D7B3CEB0FA20BDC3B1D7B3CE20C3B3B8AE2E707074>

제12장 파일 입출력

Microsoft PowerPoint - ch09_파이프 [호환 모드]

2009년 상반기 사업계획

Microsoft PowerPoint - SP6장-시그널.ppt [호환 모드]

본 강의에 들어가기 전

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

vi 사용법

PowerPoint 프레젠테이션

K&R2 Reference Manual 번역본

본 강의에 들어가기 전

제9장 프로세스 제어


System Programming Lab

1장. 유닉스 시스템 프로그래밍 개요

3. 다음장에나오는 sigprocmask 함수의설명을참고하여다음프로그램의출력물과그출력물이화면이표시되는시점을예측하세요. ( 힌트 : 각줄이표시되는시점은다음 6 가지중하나. (1) 프로그램수행직후, (2) 5 초후 (3) 10 초후 (4) 15 #include <signa

제1장 Unix란 무엇인가?

untitled

슬라이드 1

교육지원 IT시스템 선진화

Microsoft PowerPoint - 10_Process

3. 다음장에나오는 sigprocmask 함수의설명을참고하여다음프로그램의출력물과그출력물이화면이표시되는시점을예측하세요. ( 힌트 : 각줄이표시되는시점은다음 4 가지중하나. (1) 프로그램수행직후, (2) kill 명령실행직후, (3) 15 #include <signal.


<4D F736F F F696E74202D FC7C1B7CEBCBCBDBA20BBFDBCBAB0FA20BDC7C7E0205BC8A3C8AF20B8F0B5E55D>

2009년 상반기 사업계획

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

2009년 상반기 사업계획

학번 : 이름 1. 다음프로그램실행결과를예측하시오. $./a.out & [1] 7216 $ kill -USR $ kill -USR 아래학생이작성한쓰레드코드의문제점을설명하시오. void* thread_main() { pthread_mutex_t

Microsoft PowerPoint - ch07_시그널 [호환 모드]

Microsoft PowerPoint - 10_Signal

슬라이드 1

2009년 상반기 사업계획

슬라이드 1

강의10

商用

리눅스 취약점대응방안권고 / KISA 취약점점검팀 영향받는플랫폼 OS, FAQ 추가 개요 미국보안회사 에의해 시스템의 라이브러리 의특정함수에서임의코드를실행할수있는취약점이공개 해당취약점은 CVE 지정, 도메인네임을

고급 IPC 설비

Microsoft PowerPoint - lab15.pptx

PowerPoint 프레젠테이션

5.스택(강의자료).key

chap7.key

고급 프로그래밍 설계

KEY 디바이스 드라이버


Microsoft PowerPoint - comp_prac_081223_2.pptx

제1장 Unix란 무엇인가?

SYN flooding

<C1A63130C0E5C7C1B7CEBCBCBDBA2E687770>

13주-14주proc.PDF

컴파일러

C프로-3장c03逞풚

Act84_

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

1 Live CD(USB) 란? 1.1 Live CD(USB) 란? LiveCD(USB) 란 CD( 또는 USB) 를하드디스크로인식하여해당매체를기반으로동작하는운영체제를말한다. 즉 CD에설치된운영체제이다. 이는자신의 PC의하드디스크에설치된내용은 CD에그대로복사하였다고생각

Microsoft PowerPoint - chap9 [호환 모드]

Sena Technologies, Inc. HelloDevice Super 1.1.0

Microsoft PowerPoint APUE(File InO)

À©µµ³×Æ®¿÷ÇÁ·Î±×·¡¹Ö4Àå_ÃÖÁ¾

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

11장 포인터

歯9장.PDF

untitled

The Pocket Guide to TCP/IP Sockets: C Version

PowerPoint 프레젠테이션

슬라이드 제목 없음

PowerPoint 프레젠테이션

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]

4. What will be the output of this program? Explain results for each variable and each thread. #include "apue.h" int var=1; pthread_mutex_t lock; void

2015 CodeGate 풀이보고서 김성우 1. systemshock strcat(cmd, argv[1]); 에서스택버퍼오버플로우가발생합니다

chap12(process).hwp

<4D F736F F F696E74202D FB8DEB8F0B8AE20B8C5C7CE205BC8A3C8AF20B8F0B5E55D>

untitled

슬라이드 1

3) MySQL data 백업백업방법 : dump 파일로저장저장위치 : /backup/mysqldump 백업주기 : 시간별 (/etc/cron.hourly) 또는일별 (/etc/cron.daily) 보관기간 : 7 일백업스크립트 : 아래예제 6-1). 참조 4) 웹데이

Microsoft Word - Network Programming_NewVersion_01_.docx

The Pocket Guide to TCP/IP Sockets: C Version

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

UniStore

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

제8장 프로세스

Microsoft Word doc

Microsoft PowerPoint APUE(File InO).ppt

Transcription:

구축 환경 VirtualBox - Fedora 15 (kernel : 2.6.40.4-5.fc15.i686.PAE) 작동 원리 chroot유저 ssh 접속 -> 접속유저의 홈디렉토리 밑.ssh의 rc 파일 실행 -> daemonstart실행 -> daemon 작동 -> 접속 유저만의 Jail 디렉토리 생성 -> 접속 유저의.bashrc 의 chroot 명령어 실 행 -> V_Jail 접속 완료 chroot 구축에 필요한 파일 목록 /chroot/bin/ /chroot/dev/ /chroot/home/ : null zero : Jail을 이용할 사용자 홈디렉토리

/chroot/lib/ /chroot/etc/

/chroot/usr/bin/ /chroot/usr/lib/ /chroot/usr/share/ (아래 두 디렉토리를 원본그대로 Copy )

V_Jail - Daemon & Daemonstart Code & fifo.h Code - fifo.h - #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <fcntl.h> #include <limits.h> #include <sys/types.h> #include <sys/stat.h> #define SV_FIFO_NAME "/tmp/fifo/sv_fifo" #define CL_FIFO_NAME "/tmp/fifo/cl_%d_fifo" struct data_to_pass_st pid_t client_pid; ;

- Daemon.c - #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <signal.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <stdlib.h> #include "fifo.h" #include <ctype.h> void hand(int signum); int main() pid_t pid; if (( pid = fork()) < 0) exit(0); else if(pid!= 0) exit(0); signal(sighup, SIG_IGN); close(0); close(1); close(2); setsid(); while(1) struct sigaction act; sigset_t set; sigemptyset(&(act.sa_mask));

sigaddset(&(act.sa_mask), SIGUSR1); act.sa_handler = hand; sigaction(sigusr1, &act, NULL); sleep(1); void hand(int signum) if(signum == SIGUSR1) int sv_fifo_fd, cl_fifo_fd; struct data_to_pass_st fifo_data; int read_res; char cl_fifo[256]; char path_1[128]; char path_2[128]; char mnt[128]; // 아래이미지에없는것. 새로추가됨 mkfifo(sv_fifo_name, 0777); sv_fifo_fd = open(sv_fifo_name, O_RDONLY); if (sv_fifo_fd == -1) exit(exit_failure); while(1) read_res = read(sv_fifo_fd, &fifo_data, sizeof(fifo_data)); if (read_res > 0) sprintf(cl_fifo, CL_FIFO_NAME, fifo_data.client_pid); cl_fifo_fd = open(cl_fifo, O_WRONLY);

if(cl_fifo_fd!= -1) sprintf(path_1, "mkdir /V_Jail/%d", fifo_data.client_pid); sprintf(path_2, "cp rfp /chroot/* /V_Jail/%d", fifo_data.client_pid); sprintf(mnt, "mount -t proc /proc/ /V_Jail/%d/proc", fifo_data.client_pid); // 아래이미지에없는것. 새로추가됨 system(path_1); system(path_2); system(mnt); write(cl_fifo_fd, &fifo_data, sizeof(fifo_data)); close(cl_fifo_fd); close(sv_fifo_fd); unlink(sv_fifo_name); exit(exit_success);

- Daemonstart.c #include "fifo.h" #include <ctype.h> int main() system("sudo kill -10 1234"); // 1234란에는 Daemon 의 PID 입력 int sv_fifo_fd, cl_fifo_fd; struct data_to_pass_st fifo_data; char cl_fifo[256]; sv_fifo_fd = open(sv_fifo_name, O_WRONLY); if(sv_fifo_fd == 1) printf("fail_1"); exit(exit_failure); fifo_data.client_pid = getppid(); sprintf(cl_fifo, CL_FIFO_NAME, fifo_data.client_pid); if(mkfifo(cl_fifo, 0777) == -1) printf("fail_2"); exit(exit_failure); write(sv_fifo_fd, &fifo_data, sizeof(fifo_data)); cl_fifo_fd = open(cl_fifo, O_RDONLY); if(cl_fifo_fd!= -1) if(read(cl_fifo_fd, &fifo_data, sizeof(fifo_data)) > 0 ) // 이부분은 IPS가성공했을때실행할코드 close(cl_fifo_fd);

close(sv_fifo_fd); unlink(cl_fifo); exit(exit_success);

V_Jail 을사용할사용자의 rc(~/.ssh/rc) Code &.bashrc - rc #!/bin/bash trap "" 2 3 9 echo "Connecting...Please Wait..." sudo /home/chroottest/.ssh/fifotest2 & # 위경로는 fifotest2 가있는경로로바꿀수있음. while [ 1 ] do if [ -d /V_Jail/$! ] && [ -e /V_Jail/$!/etc/passwd ] && [ -d /V_Jail/$!/home/chroottest ] && [ -d /V_Jail/$!/usr/share/vim/vimfiles/tutor ] && [ -e /V_Jail/$!/usr/bin/whoami ] then echo "Welcome!!" echo $! >./.ssh/ppid break; fi done

-.bashrc - #.bashrc trap "" 2 3 9 # Source global definitions if [ -f /etc/bashrc ]; then. /etc/bashrc fi # User specific aliases and functions var=$(echo $SSH_TTY awk -F/ 'print $4') ppid=$(cat.ssh/ppid_$var) chroot --userspec=chroottest:jail /V_Jail/$ppid /bin/bash # --userspec 의내용은사용할사용자의정보로바꾸어야함 visudo 의추가내용 chroottest NOPASSWD:/home/chroottest/.ssh/fifotest2, ALL=NOPASSWD:/bin/kill, NOPASSWD:/bin/chown, NOPASSWD:/bin/chmod

V_Jail 을사용할사용자의 rc(~/.ssh/rc) Code( 수정 : 종료기추가 ) - rc (if 문안에있는 echo 들은빼도상관없음 ) #!/bin/bash trap "echo Warning! Invalid Command!" 2 3 9 echo "Connecting...Please Wait..." sudo /home/ctest/.ssh/connecter-1.0 & var=$(echo $SSH_TTY awk -F/ 'print $4') echo $! >.ssh/ppid_$var while [ 1 ] do if [ -d /V_Jail/$! ] && [ -e /V_Jail/$!/etc/passwd ] && [ -d /V_Jail/$!/home/chroottest ] && [ -d /V_Jail/$!/usr/share/vim/vimfiles/tutor ] && [ -e /V_Jail/$!/usr/bin/whoami ] then #exit 만드는부분 #var=$(echo $SSH_TTY awk -F/ 'print $4') echo "1" ptsnum=$(echo $SSH_TTY awk -F/ 'print $4') echo "2" ptsps=$(ps -ef grep pts/"$ptsnum" grep sshd awk 'print $2' head -1) echo "3" cp /home/ctest/exitfirst.c /V_Jail/$!/bin/ echo "3-2" sed "s/ptsps/$ptsps/g" /V_Jail/$!/bin/exitfirst.c > /V_Jail/$!/bin/exitsecond.c echo "4" gcc -o /V_Jail/$!/bin/exit /V_Jail/$!/bin/exitsecond.c echo "5" rm -rf /V_Jail/$!/bin/exitfirst.c /V_Jail/$!/bin/exitsecond.c echo "6"

sudo chmod o-w /V_Jail/$!/bin break; fi done * 여기까지접속관련 * * 주의 : V_Jail이란디렉토리와 chroot라는디렉토리는 / 밑에있음 * * 주의 : /chroot/ 안에는맨위의필요한파일들이들어있어야함 * * 주의 : /V_Jail/ 퍼미션주의 * * 참고 : /chroot/bin 퍼미션은 757 이어야함 ( 접속계정권한문제 ) * * ^D 해결해야됨 *