Computer Security

#18 파일을 이용한 동기화(Race condition) 본문

리눅스 시스템 프로그래밍

#18 파일을 이용한 동기화(Race condition)

쿠리 Kuri 2022. 9. 23. 18:30
반응형

Race condition(경쟁 상태)

 

- 둘 이상의 Process/Thread 가 동시에 어떤 작업을 수행할 때, 타이밍 등에 의해 의도치 않은 결과가 나올 수 있는 상태

 


 

Critical Section(임계 영역)

 

- 둘 이상의 Process/Thread가 동시에 접근하면 안되는 공유 데이터를 접근하는 코드 영역

- Race conditon을 발생시킬 수 있는 코드 영역

 

 

 

 

 

 


Race condition을 해결하기 위한 방법 : Lock mechanism

 

 

1. Critical section에 진입할 수 있는 열쇠가 있다 생각하자.

 

2. 쓰레드 A 와 쓰레드B가 Critical section에 접근하기 전에 Lock을 획득하고 진입한다.

 

3. 진입한 이후 Lock을 해제하고 나온다.

 

4. 이때, 둘다 동시에 Lock을 획득하려 할 경우, 둘중에 하나에게만 획득을 성공 해주고, 나머지 쓰레드는 실패를 하게 한다.

 

5. 획득 성공한 쓰레드가 모든 코드를 마치고, Lock 을 해제 하게되면 기다리던 쓰레드가 락을 획득하고 Critical section 으로 진입하는 구조이다.

 

 

 

 

 

 

 


Exclusive lock (배타적 잠금)

  • 쓰기 잠금(Write lock)이라고도 불린다.
  • 어떤 트랜잭션에서 데이터를 변경하고자 할 때(ex . 쓰고자 할 때) 해당 트랜잭션이 완료될 때까지 해당 테이블 혹은 레코드(row)를 다른 트랜잭션에서 읽거나 쓰지 못하게 하기 위해 Exclusive lock을 걸고 트랜잭션을 진행시키는  것이다.
  • exclusive lock에 걸리면 shared lock을 걸 수 없다. 
  • exclusive lock에 걸린 테이블,레코드등의 자원에 대해 다른 트랜잭션이 exclusive lock을 걸 수 없다.

 


Shared lock (공유 잠금)

  • 읽기 잠금(Read lock)이라고도 불린다.
  • 어떤 트랜잭션에서 데이터를 읽고자 할 때 다른 shared lock은 허용이 되지만 exclusive lock은 불가하다.
  • 리소스를 다른 사용자가 동시에 읽을 수 있게 하되 변경은 불가하게 하는 것이다.
  • 어떤 자원에 shared lock이 동시에 여러개 적용될 수 있다.
  • 어떤 자원에 shared lock이 하나라도 걸려있으면 exclusive lock을 걸 수 없다.

 

서로 보호가 되는게 아닌데 이게 무슨 필요일까?

어떤 한개 이상의 프로세스가 shared lock을 잡고 있는동안 exclusive lock이 실패한다.

 

 


  shared lock 획득 시도 exclusive lock 획득 시도
lock 없음 즉시 성공 즉시 성공
shared locked 상태 즉시 성공 모든 shared lock이 풀릴 때까지 대기
exclusive lock 상태 exclusive lock이 풀릴 때까지 대기 exclusive lock이 풀릴 때까지 대기
 

 

 

 

 

 


flock API

int flock(int fd, int operation);

 

파라미터

- fd : 파일 디스크립터 (락의 역할)

 

- operation

    - LOCK_SH : shared lock 걸기

    - LOCK_EX : exclusive lock 걸기

    - LOCK_UN : lock 풀기

    - LOCK_NB : non-block. 다른 값과 ORing 하여 사용 

 

 

 

 

반환 값

- 성공 시 0

 

- 실패 시 -1

 

 

 

 

 

 


Race condition attack

레이스 컨디션에 의해 고려되지 않은 상황이 발생하는 경우 악용이 가능한 공격

실행 프로세스가 임시파일을 생성할 시, 실행 중에 끼어들어 임시 파일을 목적 파일로 연결(심볼릭 링크)하여 권한 상승(setuid를 이용) 등 악용하는 공격

 

 
반응형

'리눅스 시스템 프로그래밍' 카테고리의 다른 글

#20 파일 속성 제어  (0) 2022.09.25
#19 파일을 이용한 동기화 (실습)  (2) 2022.09.24
#17 Memory map (실습)  (0) 2022.09.22
#16 Memory map  (2) 2022.09.21
#15 디렉토리 다루기 (실습)  (0) 2022.09.20
Comments