문제4) 구현단계에서 발생 가능한 코딩 보안 약점인 검사시점과 사용시점(TOCTOU)에 대하여 다음을 설명하시오.
가. TOCTOU의 정의와 개념
나. 문제가 발생하는 상황과 보안대책
다. TOCTOU 관점에서 아래 코드 실행시 발생가능한 문제점을 설명하고 해결 방안을 제시하시오.
void deposit(int amount) {
account += amount;
}
void withdraw(int amount) {
account -= amount;
}
답)
1. 시간 및 상태의 부적절한 관리 취약점. TOCTOU(Time Of Check, Time Of Use)의 정의와 개념
정의
|
|
개념
|
|
2. TOCTOU(Time Of Check, Time Of Use) 문제가 발생하는 상황과 보안대책
가. TOCTOU(ime Of Check, Time Of Use) 문제가 발생하는 상황
|
|
단계
|
동작 설명
|
Process A - 검사 (TOC) 성공
|
|
Process B – 삭제 (TOU) 성공
|
|
Process A – 사용 (TOU) 실패
|
|
나. TOCTOU(ime Of Check, Time Of Use) 문제 보안 대책
프로세스 동기화
|
|
|
|
기법
|
설명
|
뮤텍스
|
|
세마포어
|
|
|
3. TOCTOU(Time Of Check, Time Of Use) 관점에서 문제 코드 실행 시 발생가능한 문제점과 해결 방안
가. TOCTOU(ime Of Check, Time Of Use) 관점에서 문제 코드 실행 시 발생가능한 문제점
|
|
정상 실행 결과
|
deposit(100) 호출 : (account: 0)
deposit(100) 종료 : (account: 100) withdraw(100) 호출: (account: 100) withdraw(100) 종료: (account: 0) |
경쟁 조건 상태 실행 결과
|
deposit(100) 호출 : (account: 0)
withdraw(100) 호출: (account: 0) deposit(100) 종료 : (account: 100) withdraw(100) 종료: (account: -100) |
|
나. TOCTOU(ime Of Check, Time Of Use) 관점에서 문제 코드 해결 방안
변경 전 코드
|
문제 코드 해결 방안
|
static volatile double account;
void deposit(int amount) { // lock 없이 공유 자원에 접근 account += amount; } void deposit(int amount) { account - = amount; } |
static volatile double account;
static mtx_t account_lock; void deposit(int amount) { // mutex_lock, mutex_unlock을 이용해 공유 자원 접근을 제한한다. mutex_lock(&account_lock); account += amount mutex_unlock(&account_lock); } void withdraw(int amount) { mutex_unlock(&account_lock); account -= amount; mutex_unlock(&account_lock); } |
공감과 댓글은 아이티신비에게 큰 힘이 됩니다.
블로그 글이 유용하다면 블로그를 구독해주세요.♥
'정보관리기술 > 정보보안' 카테고리의 다른 글
대칭 암호화와 비대칭 암호화 / ① (2) | 2024.05.10 |
---|---|
NAC(Network Access Control) / ① (0) | 2024.02.06 |
동형암호(Homomorphic Encryption) / ① (0) | 2024.02.06 |
SECaaS(Security as a Service) / ① (2) | 2024.02.06 |
파일슬랙(File Slack) / ① (0) | 2024.02.06 |