Security_lab 13

윈도우 hosts 파일 실습

세상 모든 것에는 그것을 가리키는 무언가가 있다. 그리고 그것을 가리키는 말이 오직 하나만 있는 것은 아니다. 사람을 예로 들면, 우선 이름이 있고, 회사에 다닌다면 사번이 있을 수 있으며, 친한 친구들 사이에서는 별명이 있을 수도 있다. 이름, 사번, 별명 등의 '명칭'은 각각 목적이 있고, 용도도 조금씩 다르다. 인터넷이라는 광활한 네트워크 환경에도 이러한 명칭이 있다. 초기의 인터넷은 ip주소만 사용해 인터넷을 이용했다. 다시 말하면, 현재의 www.hanbit.co.kr과 같은 도메인 네임이 없었다. 그렇다고 ip주소를 직접 입력한 것은 아니다. PC의 hosts파일에 도메인 대신 '별명'과 같은 원하는 명칭을 ip주소와 매칭 시켜 인터넷을 사용했다. 하지만 hosts 파일은 각자가 임의로 정한 ..

Security_lab 2021.08.05

로그 분석과 설정

1. 로그 관련 기본 개념 로그는 공격자를 추적하는데 매우 용이하다. 윈도우와 리눅스의 로그 체계는 상당히 다르다. 윈도우는 이벤트라는 중앙 집중화된 로그를 수집하여 저장하지만, 리눅스는 로그를 여러 곳에 산발적으로 저장한다. 윈도우는 로그가 중앙 집중화되어 관리하기 편하다. 하지만 공격자가 한 로그만 삭제하면 되므로 삭제 위험도 크다. 또 로그에 대한 보안 수준이 낮은 편이다. 이에 반해 여러 곳에 저장된 리눅스 로그는 초보자는 찾기조차 쉽지 않다. 또 공격자도 로그를 모두 찾아 지우기 어렵다. 따라서 윈도우보다 리눅스에서 추적자를 찾는 것이 좀 더 수월할 수 있다. 리눅스의 모든 로그는 지우기 어렵지만, 해커를 다양한 측면에서 추적할 수 있기 때문이다. 로그를 본격적으로 살펴보기에 앞서 몇 가지 관련..

Security_lab 2021.08.04

해킹 침해사고 대응절차

해커가 침투했다고 하면 가장 먼저 무엇을 해야 할까? 침해사고에 어떻게 대응해야 하는지 그 절차는 사람마다 다를 것이다. 이는 상황의 심각성과 서비스 특성이 모두 다르기 때문이다. 따라서 경우에 따라 상황을 잘 판단하여 적절히 대응해야 할 것이다. 1. 메모리 덤프 해커가 침투한 흔적만 있을 때와 현재 해커가 침투했을 때 대응하는 절차는 조금 다르다. 우선 현재 해커가 침투했다면 메모리를 덤프 한 후 이를 CD-ROM처럼 다시 쓰기가 불가능한 백업 매체에 저장한다. 시스템에 침입한 해커를 직접 확인할 수 있는 로그를 먼저 백업하지 않는 이유는 로그의 위조 및 변조가 너무 쉬워 법적 효력이 거의 없기 때문이다. 가장 강력한 법적 효력은 메모리 덤프이다. 따라서 법적 증거물로 사용할 수 있도록 위조 및 변조..

Security_lab 2021.08.03

백도어 탐지 순서와 대응책

1. 현재 동작 중인 프로세스 확인 현재 프로세스를 확인하여 백도어가 아닌 정상 프로세스를 아는 것도 매우 중요하다. 대부분 백도어 자체가 티가 나게끔 이름을 짓지 않기 때문이다. 따라서 윈도우와 리눅스 시스템 등 정상 프로세스를 외워 두면 좋다. 특히 윈도 프로세스는 이름을 어느 정도 인지하고 있으면 윈도우 웜이나 바이러스, 백도어를 대응하는 데 큰 도움이 된다. 다음 아래 프로세스 20개는 윈도우 시스템이 동작하는 기본 프로세스이다. 익혀 두면 여러 가지로 유용한데, 특히 웜 바이러스나 백도어가 가장 애용하는 것은 Csrss와 Svchost프로세스이다. - Csrss.exe(=client/server Runtime subsystem) : 윈도우 콘솔을 관장하고, 스레드를 생성, 삭제하며, 32비트 가..

Security_lab 2021.08.02

백도어

1. 백도어와 트로이 목마 먼저 백도어의 종류를 살펴보자. 백도어 종류는 매우 다양하여 시스템과 네트워크의 모든 것을 사용해서 만든다고 생각해도 된다. 이는 세분화하면 '트로이 목마'와 '백도어'로 나눌 수 있다. 그렇다면 트로이 목마와 백도어의 차이점은 무엇일까? 사용자가 의도하지 않은 코드를 정상적인 프로그램에 삽입한 것을 트로이 목마라고 한다. 트로이 목마와 비슷한 종류로 스파이웨어가 있다. 스파이웨어는 설치된 시스템 정보를 주기적으로 원격지의 특정한 서버로 보내는 프로그램이다. 백도어는 트로이 목마와 조금 다르다. 백도어의 원래 의미는 운영체제나 프로그램을 만들 때 정상적인 인증 과정을 거치지 않고, 운영체제나 프로그램 등에 접근할 수 있도록 만든 일종의 통로이다. 이는 트랩 도어라고도 하며, 개..

Security_lab 2021.07.30

포맷 스트링 공격

포맷 스트링 공격은 버퍼 오버플로 공격과 매우 유사하다. 그래서 많은 사람이 포맷 스트링 공격과 버퍼 오버플로 공격을 정확히 구분하지 못한다. 보통 다음 코드처럼 buffer에 저장된 문자열을 printf함수를 사용하여 출력한다. % s 같은 문자열을 가리켜 포맷 스트링이라고 한다. 포맷 스트링의 종류는 다음과 같다. 포맷 스트링 문자를 이용하지 않고, printf 같은 함수를 사용하면 문제가 발생할 수 있다. 다음과 같은 코드를 작성하고 컴파일하여 실행해보면 결과는 아래와 같다. wishfree 외에 5798b228이라는 숫자를 출력한다. 이 숫자는 wishfree문자열이 저장된 다음 메모리에 존재하는 값으로 0x5798b228d을 의미한다. gdb에서 이 값을 확인해보자. &buffer인 0x7fff..

Security_lab 2021.07.29

버퍼 오버플로 공격 대응책

버퍼 오버플로 공격이 너무 흔하고 수많은 취약점을 발견하면서 운영체제도 자체적으로 대책을 세우기 시작했다. 1. 안전한 함수 사용 버퍼 오버플로 공격에 대응하는 가장 쉽고 효과적이면서 확실한 방법은 버퍼 오버플로에 취약한 함수를 사용하지 않는 것이다. 일반적으로 알려진 버퍼 오버플로 공격에 취약한 함수는 다음과 같다. - strcpy(char *dest, const char *src) - strcat(char *dest, const char *src) - getwd(char *buf) - gets(char *) - fscanf(FILE *stream, const char *format) - scanf(const char *format,...) - realpath(char *path, char reslov..

Security_lab 2021.07.28

gdb를 통한 heap buffer overflow

힙은 프로그램을 실행할 때 동적으로 할당한 메모리 공간이다. malloc계열의 HeapAlloc, HeapFree, Malloc, free, new, delete 등 함수로 제어하며, BSS라고도 한다. 힙은 스택과 반대로 메모리의 하위 주소에서 상위 주소로 영역이 커진다. 사용할 예제는 buf두개를 heap에 할당하고 buf1과 buf2의 차이를 구해서 넘게 버퍼를 사용 했을때 오버 플로우가 일어나는 상황을 보는 것이다. heap01.c이다 이는 조금 더 gdb로 분석하기 쉽게 define을 값으로 바꾸고 printf 같은 부분을 삭제하였다. 다음과 같이 컴파일한다. 실행 시의 결과는 다음과 같다. memset(buf1, 'B', (u_int)(address_diff+OVERSIZE))부분에서 buf2..

Security_lab 2021.07.27

gdb를 통한 Stack buffer overflow

버퍼는 데이터를 한 곳에서 다른 곳으로 전송하는 동안 일시 보관하는 메모리 영역이다. 이 버퍼는 항상 정해진 일정 크기를 가지는데, 이 '정해진 일정 크기'를 넘는 데이터를 입력하는 현상이 바로 버퍼 오버플로이다. 따라서 버퍼 오버플로 공격은 '버퍼에 정해진 일정 크기 이상의 데이터를 입력하여 프로그램을 공격하는 행위'라고 할 수 있다. 프로그램이 사용하는 버퍼는 메모리의 스택과 힙에 존재할 수 있다. 따라서 스택에 존재하는 버퍼 공격이나, 힙에 존재하는 버퍼 공격이냐에 따라 스택 버퍼 오버플로와 힙 버퍼 오버플로로 구분한다. 먼저 스택 버퍼 오버플로 공격을 알아볼 것이다. 이 공격은 모든 경우에 가능하지 않고, 프로그래머가 취약한 특정 함수를 사용해야 가능하다. 그리하여 이론상 취약한 함수를 사용하지 ..

Security_lab 2021.07.27

레이스 컨디션 실습

레이션 컨디션은 관리자 권한으로 실행되는 프로그램 중간에 끼어들어 자신이 원하는 작업을 하는 것이다. 물론 타이밍이 가장 중요하며, 타이밍을 맞추는 것이 쉽지는 않지만, 그렇다고 특별한 기술이 필요한 것도 아니다. 레이스 컨디션 공격과 관련되어 미리 알아두어야 할 내용을 보자. * 파일 링크 1) 하드 링크 하드 링크는 간단히 설명하면 똑같이 복사된 파일을 만드는 것이다. 실제 하드 링크를 생성하여 살펴보자 link.txt의 링크의 수가 2가 되었다. 링크가 아니었다면 1일 것이다. 이렇게 하드 링크된 파일을 수정하면 원래 파일인 a.txt도 같이 수정된다. 또 두 파일중 하나를 삭제하면 파일 내용은 바뀌지 않고 링크 숫자만 하나 줄어든다. 즉 데이터의 동기화가 일어난다고 보면 된다. 하드 링크에는 제약..

Security_lab 2021.07.25