1. 소프트웨어 보안과 시큐어 코딩
- 포인터 공격
- 제어 데이터 공격
- non-control 공격
- 경쟁 조건(자원 독점) 공격
- 검사 시점, 사용 시점
- 프로그램과 프로그램 또는 사용자 사이의 상호작용
- 파일 변조
- 메모리 변조
- 데드락
- 서로 공유되는 , 참조되는 자원을 양보안해서 시스템 실행을 못함
- 제어 데이터(프로그램 실행 흐름) 공격
- 간접 분기에 사용되는 데이터에 침입자가 원하는 주소를 기록
- 스택 프레임의 반환 주소(PC Program Count)
- toc, tou 실행흐름 여러개로 사용 보장이 안됨
- java에서는 Sync(동기화)로 해결
- 함수 포인터
- 라이브러리와 같은 공유 객체 연결 포인터
- non-control 공격
- 환경 설정 데이터
- 사용자 입력
- 사용자 신분 데이터
- 분기 결정 데이터
2. C 시큐어 코딩 : C언어의 문제점
취약성 연관 C언어 특성
- 약한 타입 체계
- 포인터 ; 가상 메모리 직접 접근
- 배열
- 매크로와 전처리기 : 원시 파일 포함, 조건부 컴파일
3. 파일 이름으로 identification 금지
아래 코드는 취약한 프로그램의 예로, 파일을 불러오는 함수이다
char *file_name = "testfile"
FILE *f_ptr;
f_ptr = fopen(file_name, "w");
if (F_ptr == NULL){
/* Handle Error */
}
/* ... /*
if (chmod(file_name, S_IRUSR) == -1) {
/* Handle Error */
}
chmod에서의 filename과 fopen()의 filename이 동일한 파일인지 확신할 수 없다.
시큐어 코딩한 프로그램의 에는 다음과 같다.
char *file_name = "testfile"
int fd;
fd = open(file_name, O_WRONLY | O_CREAT | O_EXCL, S_IRWXU);
if (fd == -1){
/* Handle Error */
}
/* ... */
if(fchmod(fd, S_IRUSR) == -1) {
/* Handle Error */
}
파일 디스크립터를 통하여 파일 권한을 변화시켜서 open()으로 열었던 파일과 동일한 파일임을 보장할 수 있다.
4. Java 시큐어 코딩
- 언어적인 관점
- 잘 정의된 수치적 연산
- 명시적 포인터를 사용하지 않음
- 플랫폼 독립적인 실행
- 잘 정의된 예외 검사 및 처리
- 언어 수준에서 예외 처리 문장을 제공
- 복구 가능한, exception 핸들링 가능
- 예외 클래스
- 예외를 객체로 처리
- 미리 정의된 다양한 에외를 제공(시스템 예외)
- 자동으로 배열과 문자열의 영역 검사 수행
- 널 포인터 참조를 검사
- 언어 수준에서 예외 처리 문장을 제공
- 네트워크 상의 클래스 파일을 실행하기 전에 보안 검사 수행
- Bytecode Verifier
- bytecode 명령어에 대한 분석 수행
- 접근 제한 규칙 준수
- 타입 일치 여부
- bytecode 명령어에 대한 분석 수행
- Class Loader
- 클래스 파일을 실행하기 위해 JVM으로 로딩
- JVM : 자바 바이트코드를 실행하는 가상 컴퓨터
- 네트워크 상에 존재하는 클래스 파일과 로컬 클래스 파일에 대한 분석 수행
- 자바의 등장으로 프로그램도 공유 가능
- 클래스 파일을 실행하기 위해 JVM으로 로딩
- Bytecode Verifier
- mutable 변수(외부 요건에 의해 값이 변경되지 않음을 의미)일지라도, 공유 변수는 반드시 동기화하여 사용할 것
- 동기화하지 않은 프로그래밍 습관
- 컴파일러에 의해 코드의 순서가 변경되는 경우가 발생
- 멀티스레드에서 할당되지 않은 변수가
- null이 아닌 경우가 발생
- 따라서 공유변수가 다음과 같은 일관성을 유지하도록 동기화 문장을 사용
'시큐어코딩' 카테고리의 다른 글
시큐어코딩 (6) - CH 02-2 일반적인 오류 코드로 살펴보기 (0) | 2025.04.13 |
---|---|
시큐어코딩 (5) - CH 02-1 String Vulnerabilities(문자열 취약점) (0) | 2025.04.13 |
시큐어 코딩 (3) - CH 01-2 (0) | 2025.04.13 |
시큐어 코딩 (2) - CH 01-1 (0) | 2025.04.13 |
시큐어 코딩 (1) - CH 00 (0) | 2025.04.13 |