2013-08-14 3 views
0

QTcp를 사용하여 서버 - 클라이언트 연결을 설정할 수있는 응용 프로그램을 개발 중입니다. *TCP 네트워크 통신 보안 위험

클라이언트가 서버에 번호를 보냅니다.

수신 된 문자열의 길이와 품질 (이 숫자 정말?) 모든 것이 정상이면

, 서버가 다시 (전송 된 수에 따라 달라집니다) 파일 경로와 응답에 확인됩니다.

클라이언트는 파일이 존재하고 유효한 이미지인지 확인합니다. 파일이 규칙을 준수하면 파일 ()을 실행합니다.

이 연결 유형에는 어떤 보안 문제가 있습니까?

이 프로그램은 Linux 시스템 용으로 설계되었으며 외부 명령 에 Qprocess를 사용하여 이미지 파일이 실행됩니다. 전송 된 문자열 (다음 명령을 실행하지 않음)과 같은이 포함 된 경우 : 다음

; rm -rf/

을 그것은 (이 파일 경로가 아니기 때문에) 보안 검사를 찾을 수없는 파일에 차단 될 것입니다. 보낸 문자열의 유효성에 대한 검사가 없으면 다음 명령이 실행됩니다.

command_to_run_on_image ; rm -rf/

패닉이 발생할 수 있습니다! 그러나 이것은 일어날 수 없다.

그래서 고려해야 할 사항이 있습니까?

+0

어쨌든 설명이 불완전하다고 생각합니다. 클라이언트가 번호를 보내면됩니다. 서버가이 번호로 무엇을하고 있습니까? 서버가 파일 경로를 보냅니 까? 당신의 클라이언트 컴퓨터에? 그리고 갑자기 어떤 명령이 실행됩니까? 무슨 명령이야? 그거 어디서 났어? 서버는 설명에 따라 이미지의 경로 만 보냅니다. – Greenflow

+0

질문을 편집했습니다. 클라이언트가 번호를 보내면 서버는이 번호에 의존하는 파일 경로로 응답합니다 (이미지는 클라이언트에 있지만 서버는 경로를 알고 있습니다). 클라이언트는 경로를 사용하여 이미지에서 명령을 실행합니다 . 이미지에서 실행 된 명령은 서버에 의해 보내지지 않습니다. 클라이언트는 이미 수신 된 경로에서 실행할 명령을 알고 있습니다. – hakermania

+0

나는 어떤 위험도 보이지 않는다. 충분히 불안한 환경에서 나는 너의 숫자와 길을 냄새로 알 수 있었다. 어쩌면 서버에 대한 클라이언트 요청을 스푸핑 할 수 있으므로 요청하지 않은 '응답'을 받게됩니다. 하지만 명령을 바꿀 수는 없습니다. 클라이언트가 존재하지 않는 경로를 수신하면 어떻게됩니까?기대하지 않는 것은 무엇입니까? 또는/etc/passwd를 가리키는 하나입니까? – Greenflow

답변

0

콘솔을 열고 command ; rm -rf /*을 입력하면 문제가 발생할 수 있습니다. 그것은 명령이 쉘에 의해 처리되기 때문입니다. 텍스트 출력을 파싱합니다. 명령을 ; 구분 기호로 분할하고 인수를 공백으로 나누면 시스템 API를 사용하여 구문 분석 된 인수로 구문 분석 된 명령을 실행합니다.

그러나 process->start("command", QStringList() << "; rm -rf /*");을 사용하면 위험하지 않습니다. QProcess은 쉘을 실행하지 않습니다. 시스템 API를 사용하여 command을 직접 실행합니다. 결과는 쉘에서 command "; rm -rf /*"을 실행하는 것과 유사합니다.

따라서 명령 만 실행되고 매개 변수가 그대로 전달 될 수 있습니다. 유일한 위험은 공격자가 자신이 구성 할 수있는 파일 경로로 명령을 호출 할 가능성입니다. 결과는 명령이하는 일에 달려 있습니다.