2012-03-04 3 views
0

스크립트를 작성하려고합니다. 모든 테스트를 자동으로 실행하고 실패를 확인합니다. 간단히 "ruby file.rb"로 테스트를 실행하고 출력을 구문 분석하십시오.) :해킹으로부터 스크립트를 보호하십시오 (디렉토리 읽기, 파일 수정).

def failures?(test_file) 
    io = IO.popen("ruby #{test_file}") 
    log = io.readlines 
    io.close 

    # parsing output for failures "1 tests, 1 assertions, 0 failures, 0 errors" 
    log.last.split(',').select{ |s| s =~ /failures/ }.first[/\d+/] != "0" 
end 

puts failures?("test.rb") 

그러나 사람이 쉽게 "test_file"몇 가지 악성 코드를 배치하고 모든 것을 부술 수 있습니다

Dir.glob("*") 
Dir.mkdir("HACK_DIR") 
File.delete("some_file") 

같은 해킹에서 루비 스크립트를 보호하는 방법은 무엇입니까?

+1

다른 OS에는 다른 권한 모델이 있습니다. 어떤 OS를 사용하고 있습니까? –

+0

나는 오직 반복 할 수 있습니다 : 당신이 안전하고 싶다면 대답에 주어진 조언을 따르지 마십시오. 너 해킹 당할거야. –

답변

0

나는 "sandbox"의 개념을 사용하지만 비슷한 것을했습니다.

먼저 테스트 파일이 아닌 OS 파일에 대한 권한이없는 테스트 사용자를 만듭니다.

테스트 시스템에서는 먼저 전체 테스트 루트 폴더를 샌드 박스 (예 : 임시 위치에서 생성됨)에 복사하고 테스트 사용자에게이 샌드 박스에 대한 권한을 부여한 다음 테스트를 테스트 사용자로 실행합니다.

따라서 테스트 실행 파일 생성/수정/삭제는이 샌드 박스로 제한됩니다. 또한이 샌드 박스에 남아있는 사후 분석 된 모든 데이터를 나중에 분석 할 수 있습니다.

나는 리눅스에서/tmp 디렉토리에 폴더를 만들고 "테스터"라는 특별한 사용자를 사용하여 쉽게 만들었습니다.

희망이 도움이됩니다.

+1

당신이 묘사 한 것은 샌드 박스가 아닙니다. 이 코드는'/ etc/passwd' 나 잠재적으로 중요한 데이터가있는 설정 파일과 같은 시스템 파일에 대한 읽기 권한을 여전히 가지고 있습니다. 또한 코드는 인터넷에 연결하여 명령을 실행할 수 있습니다. 예를 들어 악의있는 ​​사람이 서버를 사용하고 악용 할 수있는 역방향 셸을 생성 할 수 있습니다. 추천 할 수는 없습니다. 적어도 RBAC 시스템 또는 가상 머신과 결합 된 Ruby 샌드 박스 솔루션과 함께 chroot를 사용하거나 더 나은 '$ SAFE'를 사용하십시오. –

+0

고맙습니다! 나는 Ruby를 사용하여 이런 식으로 구현하려고 노력할 것이다. – makaroni4

+0

Ruby에서 샌드 박스 작업에 대한 몇 가지 프레젠테이션을 찾았습니다. http://www.youtube.com/watch?v=6XxCOYco3Eg http://www.bestechvideos.com/2009/06/04/pivotal-labs-talks - 실행중인 - 화재 - 실행 - 루비 - 코드 - 샌드 박스 – makaroni4

관련 문제