1580, 2/79 회원가입  로그인  
   yl
   http://yl11.webice.co.kr
   레벨5 레이스컨디션에 대해서. [의외로 질문하시는 분들이 많아서..]

http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Lectures&no=82 [복사]


글쓴이 : yl
2003. 10. 1. Wed

레이스컨디션에 대해서.


오늘. 메일확인을 하다가, 한 분께서 메일로 질문을 하셨는데.....

이것저것 첨가해서 상당히 길어졌는데요..

한분만 보기에도 그렇고, 레이스컨디션 문제에 대해 여러 분들로부터 쪽지, 메일, 질문글이 올라오기에 씁니다.

글을 잘 쓰지는 못해서 읽기에 불편함이 있으시겠지만,.

뭐 그래도 읽어보시면 공부하시는데에 도움이 되겠습니다.

-
레이스 컨디션 기법을 간단히 설명하자면 경쟁조건입니다.

이해를 돕기 위해 해쿨 책 내용을 참고해서 씁니다.


문제가 되었던 구 버전의 /bin/ps 프로그램은 실행도중 /tmp/ps_data 라는 파일을 생성합니다.

하지만 심볼릭 링크를 이용한 해킹을 방지하기 위해 이미 ps_data라는 파일이 있으면

지우고 난 후, 다시 ps_data라는 파일을 생성하게끔 되어 있는데요.

  **부연설명 : 파일이 지워지게 되면 링크는 끊겨버립니다.
  이렇게 함으로써 해커가 미리 ps_data 에 심볼릭 링크를 걸어두는걸 무산시킬 수 있죠.
  그럼 이럴 경우 어떻게 할까요?
  방법은 있죠. 바로 지우고 생성하는 틈을 이용하는겁니다.

ps_data 파일 존재 여부 확인
(시간 간격)
존재하면 ps_data 파일을 삭제
(시간 간격)
새로운 ps_data 파일 생성

두 번째 시간 간격에 ps_data 파일을 만들어주면서 링크를 걸어두면....
ps_data 파일이 생성 될 때 ps_data의 내용이 빠져나갈 수 있습니다.

이 타이밍을 어떻게 맞추느냐?

따로 타이밍을 계산할수는 없습니다. 그렇다고 타자로 칠수는 없죠.

유일하게 빠르게 커맨드를 내릴 수 있는 프로그래밍 언어를 빌립시다.

전체는 알려드릴수 없고 간략화 해서 써드립니다.

문법은 공부를 하시든가 찾아서 다시 만들어 보세요.

  첫번째 파일.
  system(); 함수를 이용해서 /bin/ps 실행
  x 10000 (반복 횟수는 이렇게 크지 않아도 그리 문제는 없습니다.)

  두번째 파일.
  결과물을 카피할 대상 (예:ps_data_copy)에 심볼릭 링크로 원본파일의 뿌리를 내림
  x 10000 (역시..;)

두 파일을 컴파일해서 1을 실행한 후 2를 실행해 봅시다.

/bin/ps 가 10000번이나 실행되는 동안에 약간씩 엇갈려가며 파일이 생성됩니다.
이렇게 하다보면 우리가 맞춰야 할 '두 번째 시간 간격'에 적어도 한번은 맞겠지요.
타이밍이 맞는 순간이 님께서 원하는 데이터가 추출되는 때 입니다. 알아두세요..

ftz를 들자면 이름이나 기록되는 데이터 같은 약간의 차이만 있을 뿐 /usr/bin/level5 가
하는 일은 위와 거의 같습니다. 패스워드가 저장 되는 level5.tmp의 내용을 다른 파일로
추출해내면 되는거니 그리 어렵진 않습니다. 그렇기 때문에 같은 원리를 적용하여도 됩니다.
-
여기까지


다음은 제가 심볼릭 링크를 사용하는 예를 쉽게 설명하기 위해 직접 해 본 내용입니다.


##
[level5@ftz .testsym]$ cat > b

ctrl + D
[level5@ftz .testsym]$ cat b

[level5@ftz .testsym]$ ln -s b a
[level5@ftz .testsym]$ ls -al
total 8
drwxrwxr-x        2 level5   level5        4096 Oct  1 17:13 .
drwxrwxrwt        4 root     root          4096 Oct  1 17:13 ..
lrwxrwxrwx        1 level5   level5           1 Oct  1 17:13 a -> b
-rw-rw-r--        1 level5   level5           0 Oct  1 17:13 b
[level5@ftz .testsym]$ cat > a
test im ni da
ctrl + D
[level5@ftz .testsym]$ cat a
test im ni da

[level5@ftz .testsym]$ cat b
test im ni da

[level5@ftz .testsym]$

복제본의 공씨디가 될 b를 구지 만들어 준 이유는 b의 내용변화를 보이기 위함입니다.

보시는 바와 같이 링크를 하기 전 b의 내용은 텅 비어 있습니다.

그리고 a라는 파일과 심볼릭 링크를 시켜주었고,

정말로 a의 내용이 b로 가는지 알기 위해 a에다가 test im ni da 라는 문구를 넣었습니다.

a에다가 입력 후 b의 내용을 확인해 보니 정말로 뜨는군요.

뭐 넣은 내용이 좀 허접합니다만 테스트이니.. ^^;

데이터야 어쨌든 a의 내용을 정확하게 b에 담아 낼 수 있었습니다.
##

휴, 식후 배부른 상태로 써서 앞뒤가 안맞아 보이긴 하지만

나름대로 이것저것 실험해가며 쓴 글이라 자세하리라 믿습니다. 헤헤 ^^

  Hit : 14208     Date : 2003/10/01 07:22



    
ijustwon ㅎㅎ 감사합니다... 고생하고있었는데.. 확실하진 않지만 그래도 조금은 이해가 되네요..^^ 2003/10/01  
nettiex 와.. 좀 난해한 내용이라 생각했는데 이글 보니 이해가 팍팍 감사합니다! 2004/01/17  
hyuri 감사합니다. 2004/06/21  
sam85916 예제보니까 무슨 말이지 알겠네요^^ 감사합니다 2004/12/30  
osebin 감사합니다. 많은 도움이 되었습니다. 2006/03/31
usan id 2006/11/14  
sibelli 감사합니다. 2007/01/19  
parkjh888 마지막 예제가 심볼릭 링크 거는 건가요??그런거라면 이해 잘 갑니다^^ㄳ 2007/01/19  
jjm1023 이런느낌이군요 감사합니다 2017/01/27  
1560   네트워크 개념 휘어잡기 3[17]     소유
09/12 13030
1559   커널 컴파일 하기[1]     h41d35
09/12 10690
1558   Sendmail 소스로 설치하기[1]     h41d35
09/12 12598
1557   IMAP, POP3 소스로 설치하기[3]     h41d35
09/12 10713
1556   네트워크 개념 휘어잡기 4[14]     소유
09/13 12990
1555   Xp Best Tip 30가지!!(그대는 알고있는가???)[23]     chagang531
09/13 15410
1554   네트워크 개념 휘어잡기 5[10]     소유
09/14 12673
1553   네트워크 개념 휘어잡기 6[10]     소유
09/15 11845
1552   VI편집기 명령어 및 사용법 정리[6]     ntmaster99
09/16 15645
1551   네트워크 개념 휘어잡기 7[8]     소유
09/16 11918
1550   [강좌] 98 부팅디스켓 과 fdisk 하기, 도스에서 설치하기[2]     chagang531
09/18 9941
1549   원재아빠님의 gcc 2.96에서의 버퍼 구조 강좌.[9]     ttongfly
09/19 12894
1548   윈도우 시스템의 컴퓨터에서 리눅스 설치방법[15]     o-0_o-0
09/19 13340
1547   허접팁] 암호를 바꿔 해킹피해 줄이쟈 ㅋ[17]     o-0_o-0
09/20 10510
1546   Xmanager로 리눅스 이용하기(멍멍님 만화강좌 사용)[15]     DarkSlayer
09/21 11553
1545   해킹당한 서버에서 확인해야할일[9]     소유
09/21 20200
  레벨5 레이스컨디션에 대해서. [의외로 질문하시는 분들이 많아서..][9]     yl
10/01 14207
1543     [re] ::system(); 사용 관련.. :: ↑     yl
10/04 8657
1542   리눅스의 거의 모든 명령어?[314]     소유
10/05 31425
1541   네 트 워 크 강 좌[17]     소유
10/05 17896
[1] 2 [3][4][5][6][7][8][9][10]..[79]

Copyright 1999-2023 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org & Wowhacker.com