<aside> <img src="/icons/skull_yellow.svg" alt="/icons/skull_yellow.svg" width="40px" />
운영 체제 및 서비스의 로그와 각종 문서가 저장되는 위치를 의미합니다.
디렉터리 | 설명 |
---|---|
/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" />
웹쉘 방식
웹 서버가 CGI를 통해 실행하는 파일을 이용한 공격
Common Gateway Interface(CGI)란? 동적인 컨텐츠를 처리하기 위해서 웹 서버와 php 같은 외부의 프로그램에 사이에서 인터페이스를 제공하는 프로토콜
<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>
악의적인 웹 리소스 방식
일반적으로 웹 서비스는
root
권한이 아닌www-data
,nginx
,apache
와 같이 일반 계정으로 실행됨. 웹 서버의 파일 시스템 구조를 이해하고 있다면 일반 권한으로 덮어쓸 수 있는 파일을 덮어써서 임의 코드를 실행할 수 있음.
Apache는 주로 /etc/apache2 또는 /etc/httpd에서 설정을 관리합니다. AccessFileName
지시어로 .htaccess 파일을 통해 분산 관리가 가능합니다. AllowOverride
와 AllowOverrideList
로 사용 가능한 지시어를 제한합니다.
파일 | 용도 |
---|---|
.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>
basepath
과 같은 함수를 통해 검증문자열 필터링 목록
일반 권한으로 접근 가능
| --- | --- |
일반 권한으로 접근 가능
</aside>