소프트웨어 보안을 위한 리눅스
1. 리눅스 시스템과 보안
- 서버, 모바일 등 대부분의 인프라가 리눅스 기반으로 작동.
- 오픈소스이자 보안 연구/교육에서 접근성이 높고, 시스템콜·메모리·파일 관리 등 저수준 이해가 필수.
- 시스템콜과 파일 디스크립터는 개발·보안 모두에서 핵심 개념.
2. 시스템콜(System Call)과 커널
- 시스템콜:
- 커널이 제공하는 H/W, 파일, 네트워크, 메모리 등 시스템 자원 접근 함수
- 높은 권한(커널 레벨)으로 동작
- 예시:
getpid
, execve
, mmap
, open
, read
, write
, socket
- 커널(Kernel):
- 운영체제의 핵심, Ring0(최고 권한), ARM은 Supervisor Mode
- 수행 흐름:
- 유저 레벨에서 함수 호출
- 레지스터(eax 등)에 시스템콜 넘버 세팅
int 0x80
등 소프트웨어 인터럽트
- 커널 진입 → sys_call_table[] 인덱싱 → 실제 커널 함수 실행
- 커널 스택 → 유저 스택 복귀
3. 시스템콜, PLT, GOT
- PLT (Procedure Linkage Table):
- 동적 링킹된 라이브러리 함수의 호출 위치를 중계하는 code section의 점프 테이블
- GOT (Global Offset Table):
- 동적 링킹 시 실제 함수 주소를 기록하는 data section 테이블
- 실행:
- PLT→GOT→실제 함수(라이브러리, 커널 등)로 점프
4. 시스템콜 vs API
- API: 고수준 라이브러리 함수, 내부적으로 시스템콜을 감싼 구조(printf 등).
- 시스템콜: 커널 제공 저수준 함수, 직접적으로 커널 자원에 접근.