사이트 내 전체검색
왜 & 를 소홀히 하는가?
로빈아빠
https://cmd.kr/server/906 URL이 복사되었습니다.

본문

1. & 는 무엇인가.

& 기호를 처음 보는 사람은 아마도 없을 것이다.
이것은 실생활에서 AND 를 의미하기도 하고, C 언어의 경우 & 는 AND 연산을 의미하기도 한다.
또한 && 와 같이 & 가 두개 사용되는 경우, 이것은 참과 거짓을 나타내는 논리식이 된다.
앞의 문장과 뒤의 문장이 모두 참일 경우 참이 되는 AND 논리식으로 쓰이는 것이다.
&는 또한 BASH 와 같은 쉘에서 명령을 백그라운드의 프로세스로 실행되게 하기도 하고, && 의 경우 앞의 명령이 참일경우 뒤의 명령이 실행 되어진다. 다음과 같은 명령문을 대부분 보아왔을 것이다.
$ make && make install

2. 무엇이 문제인가.

많은 보안 권고문 들은 프로그램의 정상적인 실행을 위해, 쉘 메타캐릭터(shell metacharacters) 를 입력받지 않도록 필터 하는것을 요구해왔다.
과거의 권고문들에서는 이런 보통 모든 쉘 메타캐릭터를 필터하는것을 요구하였지만, 지금에 와서는 대부분 가장 위험하다고 알려진 ; 와 | 같은 문자들만 필터링 되어지고 있다.
(해킹/보안을 다루는 문서에서조차, 두 문자외에는 언급이 없는 경우가 있다. 이상한 일이다.)

필자가 이러한 사실을 알게되어, 조사해본 결과 재미난 사실들을 발견하게 되었는데..
보통 처음에 ; 를 허용하여 위험성을 내포한 프로그램이 ; 를 필터링 하게 되고 다시 | 에 의하여 해킹 당한 경우가 종종 있었다. :)

공격의 방법은 이전의 쉘 메타캐릭터에 의한 방법과 동일 하다.
보통 abcd;ls -la 또는 abcd|ls -la 와 같이 공격을 하던것이 abcd&&ls -la 로 되어질 뿐이다. :)

3. 해결 방법은?

간단하다. 이미 이러한 문제점들은 많이 알려져 왔고, 전혀 새로운것이 아니다.
이전의 방법들과 동일하게 & 와 같은 문제점을 일으킬수 있는 쉘 메타캐릭터들을 필터한다.
;<>*|`&;$!#()[]{}:’”/^nr

4. 실제 공격은?

필자가 본 몇몇 해킹/보안 관련 문서중에는 ; | 외에는 언급이 되있지 않는 것들을 보았다.
그러한 문서들을 보며, 만들어진 어플리케이션이 있다면, 취약한점이 존재하지 않을까? :)

5. 예시

오래된 실제 어플리케이션을 보자.

// 파이프의 사용을 막기위해
       $word = ereg_replace( ";", "", $word  );
       $word = ereg_replace( "|", "", $word  );
       $word = ereg_replace( """, "", $word  );
       $word = ereg_replace( "#", "", $word  );
       $word = ereg_replace( "!", "", $word  );

      //echo("$word") ;
   
        // $word를 아규먼트로 하여 edic을 실행하여 결과값을 $fp 에 저장합니다.
        $fp = popen("/usr/bin/engdic $word", "r");

PHPSCHOOL 의 engdic 이다.
이것은 과거 ; 와 | 등의 쉘 메타캐릭터를 허용하여, 많은 논란을 불러왔었다.
그러나 현재에도 다른 쉘 메타캐릭터를 이용하여, 과거와 마찬가지의 결과를 불러올수 있다.
- 필자의 신고로 현재 패치된 상태이다. 쓸데 없는 짓은 하지 않기를 바란다.

6. 결론

근래의 대부분의 해킹은, 너무도 사소한 실수에서 이루어지고 있다.
수준 높은 해킹 기술의 경우 보통 외면 당하는것에 비해, 이러한 간단한 기법들은 폭넓게 사용되어진다.
간단한것일수록 보다 더 주의 하는 자세가 필요할것이다.

해결책으로는 escapeshellcmd() 가 직빵인듯. :)
phpschool 이 취한방식인데...
이거 우회할수 있는 방법은 없을런가 :)

댓글목록

등록된 댓글이 없습니다.

1,139 (5/23P)

Search

Copyright © Cmd 명령어 18.191.218.194