-경쟁상태

둘 이상의 입력 또는 순서 등이 결과값에 영향을 줄 수 있는 상태를 말한다. 입력 변화의 타이밍이나 순서가 예상과 다르게 작동하면서 정상적인 결과가 나오지 않을 위험이 있는데 이를 경쟁 위험이라고 지칭 한다.

 

컴퓨터 메모리 또는 스토리지에서 데이터를 읽고 쓰는 명령들이 같은 순간이라고 해도 될정도로 순식간에 처리된다.

 

그 일련의 과정 중 이전 데이터가 여전히 있는 동안 데이터의 일부 또는 전부를 덮어 씌우려 할 때 경쟁 상태가 발생한다.

 

 

process 1 process 2 memory value
A   0
Flip value   1
  A 1
  Flip value 0

 

프로세스1은 비트 플립을  수행하여 메모리값을 0->1 프로세스2도 비트플립을 수행하여 메모리값을 1->0으로 변경시킨다.

 

 

 

여기서 경쟁상태가 발생하여 두 프로세스가 겹치면 어떻게 될까?

process 1 process 2 memory value
A   0
  A 0
Flip value   1
  Flip value 1

 

메모리 값이 0이어야 하는 마지막 경우의 메모리 값은 1이 되어 있다. 이는 프로세스1이 동시 비트플립을 수행하고 있다는 것을 프로세스2가 파악하지 못하기 때문에 나온 결과이다.

 

 

-경쟁 상태로 인한 취약점

프로그램이 둘 이상의 작업을 동시 수행 하도록 하면 공격자는 교착 상태 또는 스레드 블록 상황을 만들기 위해 시작 시점과 보안 제어가 적용 되는 시점 사이의 시간 간격을 활용 할 수 있다.

(교착상태는 소프트웨어 시스템의 정지를 스레드 블록은 응용 프로그램 성능에 영향을 줄 수 있다.)

 

 

- 대응 방안

메모리 또는 스토리지 엑세스의 직렬화를 통해 경쟁 상태를 방지 할 수 있다.

 

 

webhacking.kr의 60번 문제가 네트워크에서 이를 이용하여 해결하는 문제다.

 

'Basic Concepts > System' 카테고리의 다른 글

SFPO(Stack Frame Pointer OverFlow)  (0) 2020.04.22
BOF(Buffer Over Flow)  (0) 2020.04.22
RET Sled  (0) 2020.04.22
NOP Sled  (0) 2020.04.10
스택(Stack)과 스택프레임(Stack Frame)  (0) 2020.01.26

+ Recent posts