2011-09-06 4 views
0

악의적 인 프로그램이 파일의 끝에 또는 시작 부분에 코드를 추가하기 때문에 서버 문제가 발생합니다. 나는 내 지식의 범위에서 보안 허점을 고쳤다. 호스팅 제공 업체가 보안이 적절하다고 알았지 만 사이트에서 바이러스/악성 코드 활동으로 편집증을 앓고 있습니다. 나는 계획을 가지고 있지만, sed 또는 awk 또는 gawk와 같은 리눅스 편집자들에게 정통하지는 않다. 내 PHP 지식을 사용하여이 작업을 수행 할 수 있지만 매우 리소스 집약적 인 것입니다.awk를 사용하여 맬웨어 바이러스 활동을 잠 그려면 도움이 필요합니다.

악성 코드/바이러스가 파일의 시작 또는 끝에 코드를 추가하므로 (웹 사이트에 오류가 표시되지 않도록) 모든 .php 파일을 반복적으로 조사하는 명령을 작성하는 방법을 알려주십시오. (필자는 부모 및 모든 하위 디렉토리에서 다른 유형의 파일을 변경하는 데 도움을 줄 것입니다.) 파일의 시작과 끝에 XXXXXX_START 및 YYYYYY_END와 같은 특정 태그를 추가하십시오.

그런 다음 모든 .php 파일을 읽고 코드의 첫 번째 줄이 XXXXX_START이고 마지막 줄이 YYYYYYY_END인지 확인하고 어떤 파일이 다른 것으로 확인되면 보고서를 작성해야합니다.

불일치가 발견되면 모든 파일을 확인하고 보고서를 이메일로 보내주기 위해 cron을 설정합니다.

바이러스가 주석 처리 된 줄 뒤에 데이터를 추가 할 수 있기 때문에 이것이 100 % 완벽하지는 않지만, 이것이 내가 생각할 수있는 최선의 선택입니다.

sed -i -r '1i add here' *.txt 

을하지만이 순환하지 않고 단지 상위 디렉토리의 파일에 줄을 추가 -


나는 시작에 데이터를 추가하려면 다음 명령을 시도했습니다.

그런 다음 이걸 발견했습니다. BEGIN 및 END는 특수 패턴입니다. 입력 레코드를 일치시키는 데 사용되지 않습니다. 오히려 awk 스크립트에 시작 또는 정리 정보를 제공하는 데 사용됩니다. BEGIN 룰은 첫 번째 입력 레코드가 읽히기 전에 한 번 실행됩니다. 모든 입력이 읽 t 진 후에 END 룰이 실행됩니다. 예 :

awk 'BEGIN { print "Analysis of `foo'" } 
    /foo/ { ++foobar } 
    END { print "`foo' appears " foobar " times." }' BBS-list 

그러나 불행히도, 나는 아무것도 해독 할 수 없었습니다.

위에 언급 된 세부 정보에 대한 도움을 주실 수 있습니다. 다른 제안 사항도 환영합니다.

감사합니다,

니틴

+4

:

find . -name "*.php" | xargs sed -i.bak '1iSTART_XXXX $aEND_YYYY' 

당신은 파일을 확인하려면 다음의 쉘 스크립트를 사용할 수 공식 호스팅 업체 (USB 스틱 또는 랩톱 또는 어딘가) 이외의 다른 곳에서 사용하는 공식 해시. 확인이 필요할 때 호스팅 제공 업체의 파일 해시를 다시 생성 한 다음 이번에 얻은 정보를 지난 번에 기록한 내용과 비교하십시오. 불일치는 파일 변경으로 인한 것입니다. 가장 큰 원인은 파일을 업데이트했음을 잊었고 저장된 해시 값을 변경하지 않았지만 검토 할 수있는 파일 수가 제한되어 있다는 것입니다. –

답변

1

다음을 사용하여 파일을 수정할 수 있습니다.박가) : 각 파일에 대한 SHA-256 해시를 생성하고 기록을 유지하는 더 나을 것

for f in `find . -name "*.php" -print` 
do 
    START_LINE=`head -1 $f` 
    END_LINE=`tail -1 $f` 

    if [[ $START_LINE != "START_XXXX" ]] 
    then 
     echo "$f: Mismatched header!" 
    fi 

    if [[ $END_LINE != "END_YYYY" ]] 
    then 
     echo "$f: Mismatched footer!" 
    fi 
done 
+3

백틱에주의하십시오. 이 오류가 발생하면 Google에서 '인수 목록이 너무 오래 있습니다.' 아니면 그냥'find -name "* .php"-print | 읽는 동안 f; $ START_XXX \ nEND_YYYY '에있는 case $ (sed -n -e'1p '-e'$ p ' "$ f") 계속 ;; esac; echo "$ f : mismatch"; done' – tripleee

+0

좋은 지적! – beny23

0
$ find . -type f | grep "txt$" | xargs sed -i -r '1i add here' 

는 또는 현재 디렉토리에있는 모든 파일에 해당 명령을 적용합니다. 아마도 grep 논리를 찾기 위해 접을 수는 있지만 단순한 주문을 좋아합니다.

+1

이러한 파일이 정기적으로 변경되지 않는 경우 각 파일에 대한 체크섬 (예 : md5sum)을 계산 한 다음 여전히 일치하는지 확인할 수도 있습니다. – James

+0

빠른 답변 감사합니다. 체크섬 아이디어가 마음에 들지만 사이트에서 변경 사항을 계속 유지하면서 파일이 계속 변경됩니다. –

+1

@Nitin : 릴리스 프로세스의 일부로 업로드하기 전에 파일의 체크섬을 생성하거나 업로드 직후에 (만족스럽지 않게) 파일의 체크섬을 생성하는 것입니다. 릴리스 프로세스가 충분하지 않은 경우 구현하기 시작하는 것이 좋습니다. –

1

버전 제어 및/또는 백업을 사용하십시오. 의심스러운 활동이 발생할 경우 라이브 사이트를 압축하고 백업 또는 버전 제어 소스에서 다시 설치하십시오.

+0

우리는 이미 SVN을 서버에 설치하여 사이트를 정상 상태로 복원 할 수있었습니다. 우리는 서버에 코드를 자동으로 배포하는 사후 커밋 코드를 가지고 있지만 악성 코드는 .svn 폴더 내부의 파일도 편집합니다. SVN 버전 제어는 모든 개발 회사의 필수 요소이지만 아무 것도 보장하지는 않습니다. 내 파일을 편집하는 프로그램을 추적하려고하지만 그 전에는 내 시스템이 영향을받지 않도록 충분히 작업해야합니다. –

관련 문제