<aside> <img src="/icons/skull_yellow.svg" alt="/icons/skull_yellow.svg" width="40px" />

File Vulerabilities

파일 시스템

로그 및 데이터 파일

운영 체제 및 서비스의 로그와 각종 문서가 저장되는 위치를 의미합니다.

디렉터리 설명
/var/www 웹 문서 및 기타 웹 서버에서 사용되는 파일을 저장합니다.
/var/lib 시스템의 각종 서비스에서 자료를 저장할 때 사용합니다. 데이터베이스 등이 이에 속합니다.
/var/lib/mysql MySQL 데이터베이스의 데이터가 저장됩니다.
/var/lib/pgsql, /var/lib/postgresql PostgreSQL 데이터베이스의 데이터가 저장됩니다.
/var/log 시스템 서비스 등의 로그를 저장할 때 사용합니다. 웹 서버 로그가 보통 여기에 위치합니다.
/var/cache 캐시 데이터를 저장합니다. 일반적으로 삭제되어도 재생성이 가능합니다.
/media 제거 가능한 매체 (USB 플래시 메모리, 기타 이동 저장장치 등)를 마운트할 떄 주로 사용됩니다.
/mnt 기타 파일시스템을 임시로 마운트하는 용도로 주로 사용됩니다.

설정 파일

운영 체제 및 서비스를 구성하는 설정 파일을 의미합니다.

디렉터리 및 파일 설명
/etc 운영체제 초기 부팅 시 필요한 최소한의 명령어를 구현하는 프로그램 파일을 저장합니다.
/etc/apache2, /etc/httpd Apache Web Server의 설정 정보를 저장합니다.
/etc/nginx Nginx 웹 서버의 설정 정보를 저장합니다.
/etc/mysql MySQL 데이터베이스 서버의 설정 정보를 저장합니다.
/opt/etc 추가적으로 설치된 프로그램의 설정 정보를 저장합니다. 존재하지 않을 수도 있습니다.
/etc/mysql/my.cnf MySQL 데이터베이스 서버의 주 설정파일입니다.
/etc/passwd, /etc/group 사용자 및 그룹 정보를 저장합니다.
/etc/shadow, /etc/gshadow 사용자 및 그룹의 인증 비밀번호를 암호화하여 저장합니다. 일반적으로 관리자 및 권한 있는 프로그램만이 접근할 수 있습니다.
/etc/hostname 현재 시스템의 호스트네임을 저장합니다.
/etc/hosts 호스트네임의 실주소를 탐색할 때 사용되는 정적 순람표입니다.
/etc/fstab 현재 시스템에 등록할 파일시스템의 목록을 저장합니다.

장치 및 가상 파일

운영 체제를 구성하기 위한 파일을 의미합니다. 각각의 파일은 커널 기능과 밀접한 관련이 있습니다.

디렉터리 및 파일 설명
/dev 각종 디스크 및 장치 파일을 제공합니다.
/sys 하드웨어(주변기기 등) 및 플랫폼에 접근할 수 있도록 합니다.
/proc 프로세스 및 시스템 정보를 제공하는 가상 파일시스템이 위치합니다.
/proc/sys 운영체제의 동작을 제어할 수 있는 각종 파라미터가 위치합니다.
/proc/self/net (또는 /proc/net) 운영체제 네트워크 계층의 다양한 정보를 제공하는 파일들이 위치합니다.
/dev/null, /dev/zero, /dev/full /dev/random, /dev/urandom 실제 물리적인 장치를 나타내지는 않지만 자주 사용되는 특수 파일입니다.
/dev/pts 유사터미널(pseudoterminal) TTY 장치가 위치한 디렉터리로 SSH 터미널 또는 터미널 에뮬레이터 등에서 사용됩니다.
/dev/stdin -> /proc/self/fd/0 파일 디스크립터 0, 즉 표준 입력(standard input)에 사용된 파일을 나타내는 심볼릭 링크입니다.
/dev/stdout -> /proc/self/fd/1 파일 디스크립터 1, 즉 표준 출력(standard output)에 사용된 파일을 나타내는 심볼릭 링크입니다.
/dev/stderr -> /proc/self/fd/2 파일 디스크립터 2, 즉 표준 오류 출력(standard error)에 사용된 파일을 나타내는 심볼릭 링크입니다.

프로그램 및 라이브러리

프로그램의 명령어가 저장된 위치와 이들을 실행하기 위한 라이브러리의 위치입니다.

디렉터리 설명
/bin, /sbin 운영체제 초기 부팅 시 필요한 최소한의 명령어를 구현하는 프로그램 파일을 저장합니다.
/boot 커널이나 부트로더 옵션 등 부팅에 필요한 파일을 저장합니다.
/lib, /lib64, /libx32 운영체제 초기 부팅 시 필요한 최소한의 라이브러리 파일을 저장합니다.
/opt 추가적인 프로그램을 저장합니다.
/usr/bin 각종 명령어 및 프로그램 파일을 저장합니다.
/usr/sbin 시스템 관리자가 주로 사용하는 각종 명령어 및 프로그램 파일을 저장합니다.
/usr/lib, /usr/lib64, /usr/libx32 시스템에서 공유되는 라이브러리 파일을 저장합니다.
/usr/share 기타 시스템에서 공유되는 파일을 저장합니다.

임시 파일

운영 체제 및 서비스에서 사용하는 임시 디렉터리 또는 파일을 의미합니다.

디렉터리 설명
/tmp 임시 파일을 저장합니다. 시스템 재시작(재부팅) 시 저장한 파일이 삭제될 수 있으며, 용량에 상당한 제한이 있을 수 있습니다. 디스크 또는 메모리 상(tmpfs)에 존재할 수 있습니다.
/var/tmp 임시 파일을 저장합니다. 시스템 재시작(재부팅)시에도 일반적으로 유지됩니다.
/run (/var/run) 부팅 후 생성된 각종 런타임 데이터 및 IPC 소켓 등이 이곳에 위치합니다. 일반적으로 디스크에 저장되지 않고 메모리 상에서만 존재합니다(tmpfs).
/var/run/postgresql PostgreSQL 소켓 등이 위치합니다.
/var/run/mysql MySQL 소켓 등이 위치합니다.
/dev/shm Linux shm_open(3) C 라이브러리 함수에서 사용됩니다. 일반적으로 디스크에 저장되지 않고 메모리 상에서만 존재합니다(tmpfs). 시스템에 따라 존재하지 않을 수 있습니다.
</aside>

<aside> <img src="/icons/skull_yellow.svg" alt="/icons/skull_yellow.svg" width="40px" />

파일 업로드 취약점

공격 방식


Path Traversal

악성 파일 업로드

웹쉘 방식

웹쉘

<aside> <img src="/icons/username_lightgray.svg" alt="/icons/username_lightgray.svg" width="40px" /> 웹 쉘 공격 예시

<FilesMatch ".+\\.ph(p[3457]?|t|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>

정규표현식 ".+\\.ph(p[3457]?|t|tml)$"를 만족하면, x-httpd-php로 핸들링하게 하는 Apache 설정 파일입니다. x-httpd-php는 PHP 엔진이며 요청한 파일을 실행하고, 그 결과를 반환합니다. .php.php3.phtml이 위의 정규표현식을 만족합니다.

많은 웹 서버들이 php파일에 대해 위와 같은 핸들링을 지원합니다. 따라서 공격자가 임의의 php 소스 파일을 .php 확장자로 업로드하고, GET 요청을 보낼 수 있다면 CGI에 의해 해당 코드가 실행되도록 할 수 있습니다.

</aside>

악의적인 웹 리소스 방식

방어

Apache Web Server 취약점


일반적으로 웹 서비스는 root 권한이 아닌 www-data, nginx, apache와 같이 일반 계정으로 실행됨. 웹 서버의 파일 시스템 구조를 이해하고 있다면 일반 권한으로 덮어쓸 수 있는 파일을 덮어써서 임의 코드를 실행할 수 있음.

1. 설정 파일 조작

Apache는 주로 /etc/apache2 또는 /etc/httpd에서 설정을 관리합니다. AccessFileName 지시어로 .htaccess 파일을 통해 분산 관리가 가능합니다. AllowOverrideAllowOverrideList로 사용 가능한 지시어를 제한합니다.

2. 공격 방법

취약 파일

유저 권한

파일 용도
.htaccess 웹 서버 설정 제어
/.bashrc, /.profile 로그온 시 실행 명령 지정
~/.ssh/authorized_keys SSH 공개키 관리
~/.ssh/config SSH 클라이언트 설정

루트 권한

</aside>

<aside> <img src="/icons/skull_yellow.svg" alt="/icons/skull_yellow.svg" width="40px" />

파일 다운로드 취약점

공격 방식

Path Traversal 방식

<aside> <img src="/icons/username_lightgray.svg" alt="/icons/username_lightgray.svg" width="40px" /> 환경 변수를 가져올 때 .bash_history 파일을 읽어서 쉘에서 어떤 명령을 실행했는지로 확인할 수도 있다.

</aside>

방어

방어

필터링

문자열 필터링 목록

취약 파일

시스템 가상 파일

일반 권한으로 접근 가능

| --- | --- |

설정 파일

일반 권한으로 접근 가능

</aside>