레이스 컨디션 공격
레이스 컨디션(Race Condition)은 둘 이상의 프로세스나 스레드가 공유자원에 동시에 접근할 때 접근하는 순서에 따라 비정상적인 결과가 발생하는 조건/상황을 말한다.
실행되는 프로세스가 임시파일을 만드는 경우 악의적인 프로그램을 통해 그 프로세스 실행 중에 끼어들어 임시파일을 목적파일로 연결(심볼릭 링크)하여 악의적인 행위를 할 수 있는데 이를 레이스 컨디션 공격이라 한다.
만약 프로세스가 setuid 설정이 되어 root 권한으로 실행된다면 권한 상승을 통한 중요 자원에 접근하는 심각한 문제가 될 수 있다.
- 하드 링크
하드 링크는 똑같이 복사된 파일을 만드는 것이다. 하드 링크된 파일을 수정하면 원래 파일도 똑같이 수정된다. 또한 두 파일 중 하나를 삭제하면 파일의 내용은 바뀌지 않고 링크의 숫자만 하나 줄어든다.
즉, 하드 링크에서는 두 파일이 각각 동일한 수준의 데이터를 가지며 서로 그 데이터를 동기화한다.
한 가지 제약점은 링크하고자 하는 파일이 동일한 파티션에 존재해야 한다는 것이다.
- 심볼릭 링크
레이스 컨디션 공격에 사용되는 심볼릭 링크는 하드 링크와 달리 실제 두 파일을 생성하여 링크하지 않는다.
데이터가 있는 파일이 처음부터 하나뿐이고, 심볼릭 링크는 단지 원본 파일 데이터를 가리키는 링크 정보만 가진다.
심볼릭 링크는 원본 파일이 삭제되더라도 원본 파일의 이름과 위치를 기억하고 계속 그 파일을 바라보는 상태로 남는다. 만약 삭제된 원본 파일 대신 처음 원본 파일과는 다르지만 똑같은 경로에 같은 파일명으로 파일을 생성하면 심볼릭 링크 파일은 새로 생성된 파일에 여전히 심볼릭 링크 파일로 존재하게 된다.
- 공격원리
레이스 컨디션 공격의 대상은 소유자가 root이고, SetUID 비트를 가지며 임시 파일을 생성하는 파일이다.
이렇게 실행되는 프로그램에 대해 레이스 컨디션 공격을 수행하려면 파일의 소유자가 root이고 SetUID 비트를 가져야 한다는 것 외에 생성되는 임시 파일의 이름도 알고 있어야 한다.
리눅스에는 lsof(list open files)라는 명령어가 있다. lsof 명령어로 특정 파일에 접근하는 프로세스 목록을 확인할 수 있으며, 특정 프로세스가 사용하는 파일 목록을 뽑아볼 수도 있다.
생성된 임시 파일을 확인하면 임시 파일 이름으로 프로그램이 실행되기 전의 심볼릭 링크 파일을 생성할 수 있다.
- 대응책
프로그램 로직 중에 임시 파일을 생성한 후, 임시 파일에 접근하기 전에 임시 파일에 대한 심볼릭 링크 설정 여부와 권한에 대한 검사 과정을 추가한다.
가능하면 임시 파일을 생성하지 않는다.
umask를 최하 022 정도로 유지하여 임시로 생성한 파일이 공격자에 의해 악의적으로 삭제되지 않도록 한다.
백도어(Back door)
시스템의 보안이 제거된 비밀통로로, 서비스 기술자나 유지보수 프로그래머의 접근 편의를 위해 시스템 설계자가 고의적으로 만들어 놓은 통로이다. 이런 통로를 만드는 이유는 현장에서 서비스 기술자나 공급사 유지보수 프로그래머의 업무 편의성을 향상시키기 위함이다.
악의적인 목적으로 만들어 놓은 통로도 있는데, Back orifice가 대표적이다. 이 프로그램은 해킹 프로그램의 일종으로 PC에 내장되어 사용자 몰래 사용자 정보를 저장, 유출하기 위한 프로그램이다.
- 백도어 탐지와 대응책
현재 프로세스를 확인하여 백도어가 아닌 정상 프로세스를 아는 것도 중요하다. 특히 윈도우 프로세스는 이름을 어느 정도 인지하고 있으면 윈도우 웜/바이러스나 백도어에 대응하는데 큰 도움이 된다.
호스트 기반 IDS를 사용하는 것은 백도어를 탐지하기 위한 최선의 방법 중 하나이다. 백도어가 특정 포트에서 대기하고 있기 때문에 호스트 기반 IDS는 의심스러운 포트의 활동을 탐지하도록 설정될 수 있다.
관리자는 또한 백도어 프로그램에 의해 의심스러운 실행파일에 대하여 변경이 발생되었는지 확인하기 위해 checksum을 수행할 수 있다.
가장 좋은 대응책은 최초의 권한 획득을 허락하지 않는 것이다. 한 번 설치된 백도어는 또 설치될 수 있으며 지속적으로 문제를 일으키기 때문에 꾸준한 보안 점검과 보완이 필요하다.
시스템 자원 고갈 공격(시스템 서비스 거부 공격)
대부분의 시스템을 대상으로 하는 서비스 거부 공격(DoS)는 시스템이 보유하고 있는 자원을 선점하거나 모두 고갈하는 방식으로 수행된다.
대표적인 방법으로 디스크 채우기, 메모리 고갈, 모든 프로세스 죽이기, 프로세스 무한 생성 등이 있다.
- 가용 디스크 자원 고갈 공격
파일을 생성하고 파일에 일정 크기씩 계속 써 나가는 프로그램을 예시로 들 수 있다.
- 가용 메모리 자원 고갈 공격
malloc() 함수 같이 메모리 할당을 수행하는 프로그램을 계속 실행시켜 메모리 자원을 고갈시킨다. 디스크 고갈 공격보다 시스템 자원을 더 많이 소모하여 터미널 창 하나만 띄우는데도 몇 분을 소모하게 만든다.
- 가용 프로세스 자원 고갈 공격
fork()라는 프로세스 할당 함수를 무한대로 쓴다. 이 공격은 당장 시스템 자원을 많이 차지하지는 않지만 가용 프로세스가 꽉 차면 사용하기 힘들어진다.
- 프로세스 죽이기 공격
프로세스 죽이기 기법은 공격자가 루트 권한을 획득한 상태에서 스크립트를 통해 사용 중인 프로세스를 죽이는 기법이다.
이를 통해 웹 또는 FTP 서비스를 제공하는 데몬이 함께 죽으면서 시스템에서 제공하는 모든 서비스가 동작하지 못하게 된다.
리버스 엔지니어링
장치나 시스템 구조를 분석하여 원리를 발견하는 과정을 말한다. 리버스 엔지니어링은 상업적이나 군사적으로 하드웨어를 분석하는 것에서 시작되었다. 그리고 어떤 대상을 생산하기 위한 지식이나 절차가 거의 없는 상태에서 최종 제품을 통해 설계하는 과정을 역추론하는 것이 리버스 엔지니어링의 목적이다.
- 리버스 엔지니어링 공격
공격자는 리버스 엔지니어링을 통해 공격대상 시스템 또는 응용프로그램에 대한 분석을 수행할 수 있다. 분석을 수행한 후 해당 시스템이나 응용프로그램이 갖고 있는 취약점을 찾을 수 있으며 이 취약점을 공격할 수 있는 코드를 생성해낼 수 있다.
- 대응책
난독화를 한다. 소스코드 난독화는 프로그램 소스코드를 알아보기 힘들게 만드는 기술이고 바이너리 난독화는 컴파일 후 생성된 바이너리를 역공학을 통해 분석하기 어렵게 변조하는 기술을 말한다.
기타 시스템 보안위협 및 대응책
- 루트킷(rootkit)
루트킷은 시스템에 설치되어 그 존재의 흔적을 최대한도로 숨기면서 공격자가 언제든지 시스템에 관리자 권한으로 접근할 수 있도록 비밀통로를 지속적으로 유지시켜주는 일련의 프로그램 집합을 말한다.
루트킷은 자신의 존재를 숨기기 위해 시스템을 많이 변경하게 되는데 사용자가 자신의 시스템에 루트킷이 들어와 있는지 혹은 루트킷이 어떤 변경을 했는지를 매우 알기 어렵게 만든다.
공격자는 자신의 행동을 숨기기 위해 정상적인 프로그램을 대신하도록 바이너리 파일을 변조시키는 경우가 많다. 예를 들어 ls를 바꿔치기해서 ls를 실행시켜도 공격자가 만든 파일이 보이지 않도록 한다. 주로 많이 변조되며 루트킷이 포함되어 있는 프로그램은 ls, ps, netstat, login, top, dir, du, ifconfig, find, tcpd 등이 있다.
루트킷을 찾기 위해서는 시스템 프로그램의 파일크기, 생성시간, 변경시간 등을 확인한다. /bin 또는 /usr/bin에서 #ls -alct|more로 확인했을 때 다른 프로그램이 기본적으로 설치된 시간과 다르게 변경된 것이 있는지 확인한다.
트로이목마로 자주 변조되는 ls, ps, netstat 등의 파일은 똑같은 OS 버전의 다른 시스템 파일사이즈를 비교하여 변조 여부를 확인한다.
- 논리폭탄(logic bomb)
논리폭탄은 특정한 사건이 발생할 때 프로그램이나 일련의 코드를 실행한다. 논리폭탄은 사용자가 특정한 행위를 수행할 때 그것의 페이로드 실행을 활성화하는 많은 유형의 트리거를 가질 수 있다.
예를 들어 침해된 시스템들은 논리 폭탄이 설치되어 만약 포렌식 활동이 시작된다면 논리 폭탄이 발동되어 모든 디지털 증거를 삭제하도록 할 수 있다.
'정보보안기사' 카테고리의 다른 글
TCP/IP (0) | 2023.04.07 |
---|---|
네트워크 개요 (0) | 2023.04.04 |
각종 시스템 보안위협 및 대응책 (0) | 2023.03.30 |
서버 보안 관리 - 2 (0) | 2023.03.28 |
서버 보안 관리 - 1 (0) | 2023.03.26 |