티스토리 뷰
가. 원인
- 병렬실행 환경에서 공유자원의 검사시점과 사용시점의 공유자원의 상태가 달라 오작동을 일으키는 경우
나. 영향
- 프로그램이 교착상태 발생
- 경쟁자원의 변조나 삭제 등을 통해 동기화 오류 발생
다. 보안대책
- 경쟁자원에 여러 스레드가 접근 시 동기화 사용
- 동기화 구문(Synchronized)을 이용하여 한번에 하나의 스레드만 접근하도록 구현
- 동기화 구문은 임계코드 주변에만 적용
라. 안전한 코드
1. 동기화 구문 사용
class FileManager extends Thread { private static final String SYNC = "SYNC"; private String mode = "READ";
public FileManager( String mode ){ this.mode = mode.toUpperCase(); } ... public void run() { // 파일의 읽기와 쓰기가 동시에 사용될 경우 동기화 오류를 방지하기 위해 동기화 구문 사용 synchronized( SYNC ) { File f = new File( "/readFile.txt" ); if ( f.exist() ){ if ( this.mode.equals( "READ" ) ){ BufferedReader br = new BufferedReader( new FileReader( f ) ); ... } else if { this.mode.equals( "DELETE" } ) { f.delete(); } } } } }
|
마. 진단방법
<동기화 처리 확인>
1. 멀티스레드 환경에서 공유자원을 사용하는지 확인
2. 하나의 자원에 동시접근 시 문제가 되는 자원인지 확인
3. 동기화 구문을 적용하였는지 확인
바. 정/오탐 케이스
<정탐 케이스>
1. C언어에서 하나의 공유자원을 동시 접근이 가능할 경우
<오탐 케이스>
1. Java에서 스트림 생성할 때 IOException을 발생시키며, 이에 대한 적절한 처리를 하고 있을 경우
2. 실제로 경쟁조건이 이루워지지 않을 경우
'Web Analytics > SW 보안약점 진단원' 카테고리의 다른 글
[구현보안] 에러처리 01 - 오류 메시지를 통한 정보 노출 (0) | 2019.10.07 |
---|---|
[구현보안] 시간 및 상태 02 - 종료되지 않은 반복문 또는 재귀함수 (0) | 2019.10.06 |
[구현보안] 보안기능 16 - 반복된 인증시도 제한 기능 부재 (0) | 2019.10.06 |
[구현보안] 보안기능 15 - 무결성 검사없는 코드 다운로드 (0) | 2019.10.06 |
[구현보안] 보안기능 14 - 솔트없이 일방향 해쉬 함수 사용 (0) | 2019.10.06 |
- Total
- Today
- Yesterday