https://www.kisa.or.kr/public/laws/laws3.jsp
기술안내서 가이드 < 관련법령·기술안내서 < 자료실 : 한국인터넷진흥원
기술안내서 가이드 한국인터넷진흥원 기술안내서 가이드 입니다. 게시판 목록 보기 기술안내서 가이드 표 대분류 소분류 기술안내서 가이드 대상 수준 인터넷 진흥 및 이용 활성화 인터넷 진흥
www.kisa.or.kr
구현 단계 시큐어코딩 가이드 - 시간 및 상태 - 경쟁조건: 검사시점과 사용시점(TOCTOU)
가. 개요
병렬 시스템(멀티 프로세스로 구현한 응용프로그램)에서는 자원(파일, 소켓 등)을 사용하기에 앞서 자원의 상태를 검사한다. 하지만, 자원을 사용하는 시점과 검사하는 시점이 다르기 때문에, 검사하는 시점(Time Of Check)에 존재하던 자원이 사용하던 시점(Time Of Use)에 사라지는 등 자원의 상태가 변하는 경우가 발생한다.
예를 들어, 프로세스 A와 B가 존재하는 병렬 시스템 환경에서 프로세스 A는 자원 사용(파일 읽기)에 앞서 해당 자원(파일)의 존재 여부를 검사(TOC) 한다. 이때는 프로세스 B가 해당 자원(파일)을 아직 사용(삭제) 하지 않았기 때문에, 프로세스 A는 해당 자원(파일)이 존재한다고 판단한다. 그러나 프로 세스 A가 자원 사용(파일 읽기)을 시도하는 시점(TOU)에 해당 자원(파일)은 사용 불가능 상태이기 때문에 오류 등이 발생할 수 있다.
이와 같이 하나의 자원에 대하여 동시에 검사시점과 사용시점이 달라 생기는 보안약점으로 인해 동기화 오류뿐만 아니라 교착상태 등과 같은 문제점이 발생할 수 있다.
나. 보안대책
- 공유자원(예: 파일)을 여러 프로세스가 접근하여 사용할 경우, 동기화 구문을 사용하여 한 번에 하나의 프로세스만 접근 가능하도록(synchronized, mutex 등) 하는 한편, 성능에 미치는 영향을 최소화하기 위해 임계 코드 주변만 동기화 구문을 사용한다.
다. 코드 예제
JAVA
C#
다음의 C# 코드도 파일에 동시에 접근하는 레이스 컨디션이 발생할 수 있다.
![](https://blog.kakaocdn.net/dn/dt55ju/btqFQwTVooY/fww8vOsg77QBWlmumblGd1/img.png)
아래와 같은 코드를 추가하여 레이스 컨디션을 방지해야 한다.
![](https://blog.kakaocdn.net/dn/cBs2Mh/btqFTS9m42Y/BJixJJxlNyz1wUlr4wGeEk/img.png)
C
아래 C 코드는 공유 자원 account에 대해 lock을 설정하지 않아 경쟁 조건이 발생할 수 있다. 입금과 출금이 빈번하게 발생하는 상황에서 경쟁 조건이 발생하면 account의 값이 달라진다. 아래 ex1은 정상적으로 deposit과 withdraw가 호출되는 상황이고 ex2는 경쟁 조건이 발생하는 상황이다. 최종 account의 값이 0과 -100으로 다른 것을 확인할 수 있다.
![](https://blog.kakaocdn.net/dn/c5E6QY/btqFQ77eqDy/SAHfbvYV2huQwbkkzNF8g1/img.png)
![](https://blog.kakaocdn.net/dn/YBtU2/btqFP9xPKIC/TGHSepGts6Cks1qszfQ2L1/img.png)
아래 C 코드는 mutex_lock()을 통해 공유 자원에 대한 동시 접근을 제한한 것이다.
![](https://blog.kakaocdn.net/dn/bbf4ro/btqFRAOOVzC/FwIADp77y4vyUCGl1z9kP1/img.png)
참고자료
- CWE-367 Time-of-check Time-of-use(TOCTOU) Race Condition, MITRE
http://cwe.mitre.org/data/definitions/367.html - Avoid TOCTOU race conditions while accessing files, CERT
http://www.securecoding.cert.org/confluence/display/c/FIO45-C.+Avoid+TOCTOU+race+conditions+while+accessing+files
- 레이스컨디션(Race Condition): Race Condition은 두 개 이상의 프로세스가 공용 자원을 병행적으로(concurrently) 읽거나 쓸 때, 공용 데이터에 대한 접근이 어떤 순서에 따라 이루어졌는지에 따라 그 실행 결과가 달라지는 상황을 말한다. [본문으로]
'공부 > KISA' 카테고리의 다른 글
오류 메시지를 통한 정보노출 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.22 |
---|---|
종료되지 않는 반복문 또는 재귀함수 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.22 |
반복된 인증시도 제한 기능 부재 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.21 |
무결성 검사 없는 코드 다운로드 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.21 |
솔트 없이 일방향 해쉬함수 사용 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.21 |
댓글