16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

43
1 HANNAM UNIVERSITY SoftwareEngineering Lab 16 16 . . 장장장장 장장 장장장장장 장장장장 장장 장장장장장 장장장장장장장장장장 장장장장장장장장장장 장 장 장 장 장 장

Upload: polly

Post on 21-Jan-2016

106 views

Category:

Documents


0 download

DESCRIPTION

16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수. 목차. 보안에 대한 정의 보안 문제점들 적과 아군의 식별 Inetd 서버의 보호 래퍼 및 서버 프로그램의 설치 클라이언트 프로그램의 소개 래퍼의 설치 및 테스트 데이터그램 취약성. 보안에 대한 정의. The Merriam Webster ’ s Collegiate Dictionary 위협으로부터의 자유와 같은 안전한 특성 또는 상태 스파이행위 또는 사보타주 , 범죄 , 공격 , 누출에 대항하여 이루어지는 보호의 측정 네트워크 보안 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

1HANNAM UNIVERSITYSoftwareEngineering Lab

1616 장장 .. 네트워크 보안 프로그래밍네트워크 보안 프로그래밍

소프트웨어공학연구실소프트웨어공학연구실최 상 수최 상 수

Page 2: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

2HANNAM UNIVERSITYSoftwareEngineering Lab

목차목차

보안에 대한 정의 보안 문제점들 적과 아군의 식별 Inetd 서버의 보호 래퍼 및 서버 프로그램의 설치 클라이언트 프로그램의 소개 래퍼의 설치 및 테스트 데이터그램 취약성

Page 3: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

3HANNAM UNIVERSITYSoftwareEngineering Lab

보안에 대한 정의보안에 대한 정의

The Merriam Webster’s Collegiate Dictionary위협으로부터의 자유와 같은 안전한 특성 또는 상태스파이행위 또는 사보타주 , 범죄 , 공격 , 누출에

대항하여 이루어지는 보호의 측정네트워크 보안

인지된 위협으로부터의 자유무단 조사 , 사보타주 , 도난 또는 기타 공격으로부터

시스템 자원들의 보호

Page 4: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

4HANNAM UNIVERSITYSoftwareEngineering Lab

보안 문제점들보안 문제점들

Lock 의 형태무장 경비원의 고용키 - 기반과 카드 - 기반 Lock : 물리적 토큰Lock 과 패스워드 , PIN 번호의 조합 : 비밀 지식망막 , 지문과 성문 (voice print) 스캔 : 유일한

특징 보안 방법들의 약점

물리적 토큰 → 복사비밀 지식 → 공유 , 기록 , 추측유일한 특징 → 무력

Page 5: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

5HANNAM UNIVERSITYSoftwareEngineering Lab

보안 문제점들보안 문제점들

보안에 대한 기본적인 진리한 명의 사용자에게 접근 권한을 허가한 시스템은 ,

잠재적으로 다른 사용자들에게도 마찬가지로 접근을 허용할 수 있다 .

어느 누구도 접근 권한을 얻지 못하는 시스템만이 , 오직 완벽하게 안전한 시스템이다 .

결론자원에 대한 타당하고 안전한 접근이 허용되는지 ,

항상 보안에 대하여 고려해야만 한다 .

Page 6: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

6HANNAM UNIVERSITYSoftwareEngineering Lab

적과 아군의 식별적과 아군의 식별

IP 번호 →호스트네임과 도메인네임 분석 (적용 가능한 접근정책 )특정 호스트 네임들에 대한 접근 허가특정 도메인들에 대한 접근 허가특정 호스트 네임들에 대한 접근 거부특정 도메인들에 대한 접근 거부어떤 이름으로 분석되지 않은 IP 번호들에 대한

접근 거부

Page 7: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

7HANNAM UNIVERSITYSoftwareEngineering Lab

적과 아군의 식별적과 아군의 식별

호스트네임 또는 도메인네임에 의한 보호

Accept(2) Recvfrom(2)

Gethostbyaddr(3)

Page 8: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

8HANNAM UNIVERSITYSoftwareEngineering Lab

적과 아군의 식별적과 아군의 식별

Accept(2) 예제

Struct sockaddr_in adr_clnt;Int len_inet;Int c;……Len_inet = sizeof adr_clnt;c = accpt(s, (struct sockaddr *)&adr_clnt, &len_inet);

Page 9: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

9HANNAM UNIVERSITYSoftwareEngineering Lab

적과 아군의 식별적과 아군의 식별

Recvfrom(2) 예제

Int z;Struct sockaddr_in adr_clnt;Int len_inet;Int s;char dgram[512];len_inet = sizeof adr_clnt;z = recvfrom(s, dgram, sizeof dgram, 0, (struct sockaddr *)&adr_clnt, &len_inet);

Page 10: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

10HANNAM UNIVERSITYSoftwareEngineering Lab

적과 아군의 식별적과 아군의 식별

Gethostbyaddr(3) 예제

Struct sockaddr_in adr_clnt;Struct hostent *hp;

hp = gethostbyaddr( (char *)&adr_clnt.sin_addr, sizeof adr_clnt.sin_addr, adr_clnt.sin_family);

If(!hp) fprintf(logf, “ERROR: %s\n”, hstrerror(h_errno));else printf(logf, “ %s\n”, hp->h_name);

Page 11: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

11HANNAM UNIVERSITYSoftwareEngineering Lab

적과 아군의 식별적과 아군의 식별

IP 번호에 의한 식별보안 문제 : IP 번호를 받을때 또다른 네트워크

프로세스를 사용하여 그 번호를 호스트네임으로 분석해야만 함

IP 번호를 단독으로 사용 IP 번호 갱신 자신들의 IP 번호를 모르는 사용자 처리

로그 파일에 기록네트워크 ID 단계에서의 접근 제한

Page 12: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

12HANNAM UNIVERSITYSoftwareEngineering Lab

Inetd Inetd 서버의 보호서버의 보호

중앙 집중화된 정책Inetd 데몬

클라이언트 요청을 위한 listen 에 필요한 모든 코드 제공 필요시에만 서버를 구동 중앙 집중화된 네트워크 보안 모델의 설치 가능

TCP 래퍼 프로그램 Wietse Venema 의 TCP 래퍼 프로그램 ( 레드헷 6.0) Tcpd 프로그램이 inetd 와 서버 사이에 자신을 삽입 투명한 방법으로 이루어짐

Page 13: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

13HANNAM UNIVERSITYSoftwareEngineering Lab

Inetd Inetd 서버의 보호서버의 보호

TCP 래퍼 개념의 이해

Remote

Client1 inetd

In.telnetd

tcpdfork(2)&exec(2)

exec(2)

Page 14: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

14HANNAM UNIVERSITYSoftwareEngineering Lab

Inetd Inetd 서버의 보호서버의 보호

원격 클라이언트가 in.telnetd 서버에 접속하는 프로세스

Remote

Client1 inetd

In.telnetd

tcpdfork(2)&exec(2)

exec(2)

1. 연결요청 2. 요청수락

3. 새로운 프로세스 fork(2) / 부모 프로세스는 listen

4. 자식 프로세스는 exec(2) 호출하여 usr/sbin/tcpd 실행

5.접속허가여

부 결정6. 거부 :

종료7. 허가 : 경로 명시 /usr/sbin/in.telnetd

8. 입출력 수행

Page 15: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

15HANNAM UNIVERSITYSoftwareEngineering Lab

Inetd Inetd 서버의 보호서버의 보호

번호를 사용

Remote

Client1 inetd

In.telnetd

tcpdfork(2)&exec(2)

exec(2)

PID 124

자식 PID 1243 PID 1243

PID 1243

종료시 SIGCHLD

Wait(2) 호출

서버 프로세스가 부모 inetd 의 직접적인 자식 프로세스일 때에만 정확하게 수행한다 !

Page 16: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

16HANNAM UNIVERSITYSoftwareEngineering Lab

Inetd Inetd 서버의 보호서버의 보호

접근 결정서비스 결정

Getsoketname(2) 함수 : 소켓 주소 , 서비스 포트 번호클라이언트의 신분 결정

Getpeername(2) 함수 : 클라이언트의 주소 , 포트 번호데이터그램 클라이언트의 신분 결정

데이터그램은 accept(2) 함수를 사용하지 않음 MSG_PEEK 플래그 옵션 + recvfrom(2) 함수 MSG_PEEK : 클라이언트의 주소를 리턴

Page 17: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

17HANNAM UNIVERSITYSoftwareEngineering Lab

Inetd Inetd 서버의 보호서버의 보호

MSG_PEEK 플래그 옵션 + recvfrom(2) 함수

Int z;Struct sockaddr_in adr_clnt;Int len_inet;Int s;Char dgram[512];Len_inet = sizeof adr_clnt;z = recvfrom(s, dgram, sizeof dgram, MSG_PEEK, (struct sockaddr *)&adr_clnt, &len_inet);

Page 18: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

18HANNAM UNIVERSITYSoftwareEngineering Lab

래퍼 및 서버 프로그램의 설치래퍼 및 서버 프로그램의 설치

서버와 래퍼 로깅 코드의 시험리스트 16.1 : log.c

로그 파일 open : log_open()

21: Int22: Log_open(const char *pathname) {23:24: logf = fopen(pathname, “a”);25: return logf ? 0 : -1;26: }

Page 19: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

19HANNAM UNIVERSITYSoftwareEngineering Lab

래퍼 및 서버 프로그램의 설치래퍼 및 서버 프로그램의 설치

Printf(3) 스타일의 로깅 함수 : log()

31: Void32: Log(const char *format,…) {33: va_list ap;34: 35: if(!logf)36: return;37: 38: fprintf(logf, “[PID %ld] “, (long)getpid());39: 40: Va_start(ap, format);41: vfprintf(log, format, ap);42: va_end(ap);43: fflush(logf);44: }

Page 20: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

20HANNAM UNIVERSITYSoftwareEngineering Lab

래퍼 및 서버 프로그램의 설치래퍼 및 서버 프로그램의 설치

로그 파일 close : Log_close()

49: Void50: Log_close(void) {51: 52: if(logf)53: fclose(logf);54: logf = NULL;55: }

Page 21: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

21HANNAM UNIVERSITYSoftwareEngineering Lab

래퍼 및 서버 프로그램의 설치래퍼 및 서버 프로그램의 설치

로그 파일에 출력 내용 기록 : bail()

61: Void62: Bail(const char *on_what) {63: 64: if(logf) {65: if(errno)66: log(“%s: “, strerror(errno));67: log(“%s\n”, on_what);68: log_close();69: }70: exit(1);71: }

Page 22: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

22HANNAM UNIVERSITYSoftwareEngineering Lab

래퍼 및 서버 프로그램의 설치래퍼 및 서버 프로그램의 설치

리스트 16.2 : log.h

1: /* log.h2: *3: * log.c externs:4: */5: extern int log_open(const char *pathname);6: extern void log(const char *format,…);7: extern void log_close(void);8: extern void bail(const char *on_what);

Page 23: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

23HANNAM UNIVERSITYSoftwareEngineering Lab

래퍼 및 서버 프로그램의 설치래퍼 및 서버 프로그램의 설치

데이터그램 서버 코드의 시험리스트 16.3 : dgramisrvr.c

로그파일 open

Server Loop 시작 (for)

데이터그램 read

데이터그램 종료

Date/time 요청 처리

Client 에 결과 응답

다른 데이터그램 wait

에러 / 타임아웃 기록Error/

timeout

데이터그램 도착

Page 24: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

24HANNAM UNIVERSITYSoftwareEngineering Lab

래퍼 및 서버 프로그램의 설치래퍼 및 서버 프로그램의 설치

로그 파일 open

if(log_open(LOGPATH) == -1) exit(1);log(“dgramisrvr started.\n”);S = 0;FD_ZERO(&rx_set);FD_SET(s, &rx_set);

Page 25: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

25HANNAM UNIVERSITYSoftwareEngineering Lab

래퍼 및 서버 프로그램의 설치래퍼 및 서버 프로그램의 설치

데이터그램 read

alen = sizeof adr_clnt;z = recvfrom(s, dgram, sizeof dgram, 0, (struct sockaddr *)&adr_clnt, &alen);If(z < 0) bail(“recvfrom(2)”);

Page 26: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

26HANNAM UNIVERSITYSoftwareEngineering Lab

래퍼 및 서버 프로그램의 설치래퍼 및 서버 프로그램의 설치

데이터그램 종료

dgram[z] = 0;

Date/time 요청 처리

time(&td); dtv = *localtime(&td); strftime(dtfmt, sizeof dtfmt, dgram, &dtv);

Page 27: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

27HANNAM UNIVERSITYSoftwareEngineering Lab

래퍼 및 서버 프로그램의 설치래퍼 및 서버 프로그램의 설치

클라이언트에 결과 응답

Z = sendto(s, dtfmt, strlen(dtfmt, 0, (struct sockaddr *)&adr_clnt, alen); if(z < 0) bail(“sendto(2)”);

Page 28: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

28HANNAM UNIVERSITYSoftwareEngineering Lab

래퍼 및 서버 프로그램의 설치래퍼 및 서버 프로그램의 설치

다른 데이터그램 wait

do { tmout.tv_sec = 8; tmout.tv_usec = 0; z = select(s+1, &rx_set, NULL, NULL, &tmout); } while(z == -1 && errno = EINTR);

Select(2) 호출의 리턴값 데이터그램 도착 : 1 Timeout : 0 Error : -1

Page 29: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

29HANNAM UNIVERSITYSoftwareEngineering Lab

래퍼 및 서버 프로그램의 설치래퍼 및 서버 프로그램의 설치

Error/timeout 발생시 for loop 종료

if(z <= 0) break;

Error/timeout 메시지 기록

if(z == -1) log(“%s: select(2)\n”, strerror(errno)); else log(“Timed out: server exiting.\n”);

Page 30: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

30HANNAM UNIVERSITYSoftwareEngineering Lab

래퍼 및 서버 프로그램의 설치래퍼 및 서버 프로그램의 설치

간단한 TCP 래퍼 프로그램의 시험리스트 16.4 : wrapper.c

로그파일 open

데이터그램 주소 결정

주소→스트링 변환

클라이언트 주소 Test

요청 거부

요청 허가

Page 31: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

31HANNAM UNIVERSITYSoftwareEngineering Lab

래퍼 및 서버 프로그램의 설치래퍼 및 서버 프로그램의 설치

간단한 보안 정책 구현 클라이언트 주소 = 127.7.7.7 → 요청 허가 그 이외의 주소 → 요청 거부

클라이언트 주소 Test …… str_addr = inet_ntoa(adr_clnt.sin_addr);

If(strcmp(str_addr, “127.7.7.7”) != 0) { …… ……

Page 32: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

32HANNAM UNIVERSITYSoftwareEngineering Lab

래퍼 및 서버 프로그램의 설치래퍼 및 서버 프로그램의 설치

요청 거부

log(“Address %s port %d rejected.\n”, str_addr, ntohs(adr_clnt.sin_port)); // 요청 기록 z = recvfrom(0, // 데이터그램 discard dgram, sizeof dgram, 0, (struct sockaddr *)&adr_clnt, &alen); if(z < 0) // 에러 기록 및 종료 bail(“recvfrom(2), eating dgram”); exit(1);

Page 33: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

33HANNAM UNIVERSITYSoftwareEngineering Lab

래퍼 및 서버 프로그램의 설치래퍼 및 서버 프로그램의 설치

요청 허가

log(“Address %s port %d accepted.\n”, str_addr, ntohs(adr_clnt.sin_port)); // 요청 기록 log(“Starting ‘%s’\n”, argv[0]); // 시작상태 기록 log_close(); // 로그 close

z = execve(argv[0], argv, envp); // 래퍼 교체

Page 34: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

34HANNAM UNIVERSITYSoftwareEngineering Lab

클라이언트 프로그램의 소개클라이언트 프로그램의 소개

리스트 16.5 : dgramcln2.c 6 장의 리스트 6.2 dgramclnt.c 와 비슷함

두개의 command-line argument 요구

If(argc != 3) { fputs(“Usage: dgramclnt <server_ipaddr>” “<client_ipaddr>\n”, stderr); return 1; }

Page 35: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

35HANNAM UNIVERSITYSoftwareEngineering Lab

클라이언트 프로그램의 소개클라이언트 프로그램의 소개

로컬 소켓의 IP 주소 한정

memset(&adr_clnt, 0, sizeof adr_clnt); adr_clnt.sin_family = AF_INET; adr_clnt.sin_port = 0; adr_clnt.sin_addr.s_addr = inet_addr(clnt_addr); if(adr_clnt.sin_addr.s_addr == INADDR_NONE) bail(“bad client address.”); z = bind(s, (struct sockaddr *)&adr_clnt, sizeof adr_clnt); if(z == -1) bail(“bind(2) of client address”);

Page 36: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

36HANNAM UNIVERSITYSoftwareEngineering Lab

래퍼의 설치 및 테스트래퍼의 설치 및 테스트

Inetd 데몬의 실행

$ /usr/sbin/inetd /tmp/inetd.conf$

$ ps –ef | grep inetdRoot 313 1 0 Feb15 ? 00:00:00 inetdStudnt 12763 1 0 23:04 ? 00:00:00

/usr/sbin/inetd /tmp/inetd.conf

Studnt 12765 11739 0 23:04 ? 00:00:00 grep inetd

Page 37: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

37HANNAM UNIVERSITYSoftwareEngineering Lab

래퍼의 설치 및 테스트래퍼의 설치 및 테스트

래퍼 프로그램의 테스트

$ ./dgramcln2 127.0.0.1 127.7.7.7

Enter format string: %A %B %DResult from 127.7.7.7 port 9090 : ‘Tuesday November 11/09/99’

Enter format string:

Page 38: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

38HANNAM UNIVERSITYSoftwareEngineering Lab

래퍼의 설치 및 테스트래퍼의 설치 및 테스트

Wrapper log

$ tail –f /tmp/wrapper.log[PID 1279] wrapper started.[PID 1279] Address 127.7.7.7 port 1027 accepted.[PID 1279] Starting ‘/tmp/dgramisrvr’

Server log

$ tail –f /tmp/dgramisrvr.log[PID 1279] dgramisrvr started.[PID 1279] Got request ‘%A %B %D’ from 127.7.7.7 port 1027[PID 1279] Timed out: server exiting.

Page 39: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

39HANNAM UNIVERSITYSoftwareEngineering Lab

래퍼의 설치 및 테스트래퍼의 설치 및 테스트

서버 timeout 테스트

$ ./dgramcln2 127.0.0.1 127.7.7.7

Enter format string: %xResult from 127.7.7.7 port 9090 : ‘11/09/99’

Enter format string: %x %XResult from 127.7.7.7 port 9090 : ‘11/09/99 19:11:32’

Enter format string: CTRL+D$

Page 40: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

40HANNAM UNIVERSITYSoftwareEngineering Lab

래퍼의 설치 및 테스트래퍼의 설치 및 테스트

8초 이내에 처리했을 경우 단일 프로세스로 처리됨

$ tail –f /tmp/dgramisrvr.log[PID 1279] dgramisrvr started.[PID 1279] Got request ‘%A %B %D’ from 127.7.7.7 port 1027[PID 1279] Timed out: server exiting.[PID 1294] dgramisrvr started.[PID 1294] Got request ‘%x’ from 127.7.7.7 port 1027[PID 1294] Got request ‘%x %X’ from 127.7.7.7 port 1027[PID 1294] Timed out: server exiting.

Page 41: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

41HANNAM UNIVERSITYSoftwareEngineering Lab

데이터그램 취약성데이터그램 취약성

데이터그램 서버를 위한 래퍼 설계시 취약성 서버 루핑

1. 데이터그램 도착 , inetd 에게 통보2. Inetd 데몬은 래퍼 프로그램 시작3. 래퍼 프로그램은 exec(2) 호출4. 데이터그램 서버는 데이터그램을 읽고 처리5. 서버는 다른 데이터그램을 위해 wait6. 데이터그램 도착하면 , 4 부터 반복7. 그렇지 않다면 , 서버는 timeout 되고 종료됨8. 1 부터 반복

Page 42: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

42HANNAM UNIVERSITYSoftwareEngineering Lab

데이터그램 취약성데이터그램 취약성

단계 3 → 보안 점검서버가 계속 실행중인 동안 프로세스는 단계 4

부터 반복 → 보안 점검 생략

선택 가능한 옵션오직 nowait 스타일의 데이터그램을 사용처리 전에 각 데이터그램 테스트 위해 ,

데이터그램 서버 내에 custom 코드 사용

Page 43: 16 장 . 네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수

43HANNAM UNIVERSITYSoftwareEngineering Lab

요약요약