it-swarm-korea.com

수동 검토를위한 위험한 호출에 대한 PHP 파일 검색 스크립팅

큰 사이트의 모든 PHP 파일에서 위험한 명령을 검색하는 스크립트를 자동화하고 있습니다. 발견 된 파일은 수동으로 코드 검토됩니다.

누구든지 내 스크립트에 대한 권장 사항이 있습니까? 검색하지 못했던 것이 있습니까? 이 스크립트는 10 분 만에 작성되었으므로 더 쉽고 더 좋게 만들기 위해 수행 할 수있는 많은 개선이있을 것이라고 확신합니다 (여러 egrep 인수처럼).

find . | grep "php$" | xargs grep -s "eval(" >> /tmp/review.txt
find . | grep "php$" | xargs grep -s "fopen(" >> /tmp/review.txt 
find . | grep "php$" | xargs grep -s "passthru(" >> /tmp/review.txt 
find . | grep "php$" | xargs grep -s "exec(" >> /tmp/review.txt 
find . | grep "php$" | xargs grep -s "proc_" >> /tmp/review.txt 
find . | grep "php$" | xargs grep -s "dl(" >> /tmp/review.txt 
find . | grep "php$" | xargs grep -s "require($" >> /tmp/review.txt
find . | grep "php$" | xargs grep -s "require_once($" >> /tmp/review.txt
find . | grep "php$" | xargs grep -s "include($" >> /tmp/review.txt 
find . | grep "php$" | xargs grep -s "include_once($" >> /tmp/review.txt 
find . | grep "php$" | xargs grep -s "include($" >> /tmp/review.txt 
find . | grep "php$" | xargs grep -s "query(" >> /tmp/review.txt 
8
Chris Dale

확실히이 목록으로는 충분하지 않습니다. 첫째, 완전하지 않습니다. 둘째, 다른 난독 화 방법을 사용하여 웹 쉘, 기타 악성 스크립트를 숨길 수 있습니다.

이러한 목적을 위해 오래 전에 위험한 장소를 찾기 위해 PHP 스크립트를 작성했습니다 : http://0x416d73.name/proj/fcc.html . PHP로 작성되었으므로 "find"명령만큼 빠르다고 기대하지 마십시오. 그러나 파일 해시를 확인하고 어떤 파일이 나타 났는지, 누락되었거나 변경되었는지 볼 수 있습니다. 프로덕션 서버에서 실행하기 전에 작동 방식을 확인하기 위해 먼저 작은 스크립트에 대해 테스트하는 것이 좋습니다. 또한, 특히 PHP 코드의 취약점 검색을 위해, 얼마 전에 몇 가지 쉬운 bash 스크립트를 작성했습니다- http://privatepaste.com/88a5d5eaa . 완전하지 않습니다. bash 전문가의 조정과 비판이 필요할 수 있습니다. :)

자신의 스크립트에서 계속하려면 여기에서 필요한 것을 추출 할 수있는 Nice 목록이 있습니다. http://privatepaste.com/dc335ccb86 .

업데이트 됨 : 알다시피 주제는 코드 검토에 관한 것입니다. 위에서 언급 한 솔루션은 여전히 ​​의미가 있지만이 프로젝트를 언급하고 싶습니다. http://sourceforge.net/projects/rips-scanner/ . 제 생각에는 현재 PHP 웹 응용 프로그램에 대해 가장 무료로 사용할 수있는 소스 코드 분석기입니다.

8
anonymous

PHP에서 정적 분석 도구를 직접 사용한 경험은 없지만 오픈 소스 및 상용 도구가 많이있는 것 같습니다.

간단히 말해, PHPLint는 상당히 빠르고 사용하기 쉬워야합니다. 내 해석에 따르면 C의 lint/splint와 매우 유사하게 작동합니다.

오픈 소스

상업

5
Scott Pack

나는 PHP 전문가가 아니기 때문에 더 많은 것을 찾을 방법을 추가 할 필요가 없지만, 임의의 여백이 당신의 결과를 엉망으로 만들 것이라는 점에 유의해야합니다.
예 :.

fopen  ( 

찾을 수 없습니다 ...

3
AviD

extract 또한 위험한 언어 구조라고 생각합니다. (eval ()보다 드물게 사용되지만 많은 사람들이 깨닫지 못합니다.)

Php Code Sniffer를 사용하여이를 자신의 '스 니프'로 작성할 수도 있습니다. 여기 하나 내가 작업하는 오픈 소스 프로젝트를 위해 작성했습니다.

2
Mark E. Haase