모두가 셸 스크립트를 좋아합니다! 대부분의 Linux 기반 보안 제품에서 셸 스크립트가 많이 사용되는 것도 당연합니다. 셸 스크립트는 컴파일 문제가 없고 프로토타입 제작도 쉽기 때문에 C/C++ 프로그램보다 개발이 쉽습니다.
그러나 쉘 스크립트는 무한한 활용 가능성을 가지고 있다는 점 외에도 보안 측면에서 많은 숨겨진 위험을 안고 있습니다. 쉘 스크립트를 작성할 때 이러한 위험이 간과되는 경우가 많습니다.
예를 들어, 두 호스트 간의 연결을 확인하기 위해 ping 명령을 사용하는 셸 스크립트를 생각해 보겠습니다.
#! / bin / bash
ping –c1 “$1”
이 사용 사례에서 $1은 CGI 또는 다른 스크립트에서 파생된 입력일 수 있습니다. 입력의 유효성이 제대로 검증되지 않으면 해커가 명령 대체를 쉽게 악용할 수 있습니다.
ping –c1 “8.8.8.8 && 명령”
이 예에서 쉘 스크립트는 전달된 인수를 처리합니다. 핑 실행할 때 별도의 명령으로 사용합니다. 그러나 이 명령 대체를 구현하는 다른 방법도 여러 가지 있습니다.
ping –c1 “8.8.8.8`명령`”
핑 –c1 8.8.8.8|명령
ping –c1 8.8.8.8; 명령
게이트웨이 수준 보안 제품의 대부분은 다음과 같습니다. 통합 위협 관리 (UTM)방화벽은 최종 사용자에게 포털을 제공합니다. 포털은 원격 접속 도구 다운로드, 격리된 이메일 검색, 사용자 환경 설정 변경 등 다양한 서비스를 제공합니다.
이러한 서비스는 어떤 형태의 사용자 입력을 예상하고 소프트웨어 제품의 백엔드에서 셸 스크립트를 호출할 수 있습니다.
이러한 악용 사례로 인해 공격자는 취약한 기기에 악성 입력을 전송하여 원격 명령을 실행하여 루트 권한을 획득할 수 있습니다. 취약한 기기에 접근하면 공격자는 조직의 네트워크에 침투할 수 있습니다.
사용자 입력은 대부분 검증되지만, 일부 검증이 계속해서 누락될 가능성이 있습니다.
이 명령어 대체 공격은 공격자가 유효한 자격 증명 없이도 이 공격을 실행할 수 있으므로 '사전 인증 원격 명령 실행'이라고도 합니다.
아주 최근에 이 결함이 유명 브랜드의 방화벽 어플라이언스에서 발견되었습니다.
In 시크라이트 UTM우리는 개발 과정에서 이러한 영역에 명확히 초점을 맞춰 기기가 이러한 일반적인 악용에 취약하지 않도록 합니다.
보안 셸 스크립트를 작성하기 위한 몇 가지 지침은 다음과 같습니다.
- 스크립트에서 사용되는 명령에는 절대 경로나 상대 경로를 사용하세요.
- 스크립트에서 PATH 변수의 올바른 값을 설정합니다.
- 인수로 전달되는 변수에 적절한 인용 부호를 사용하세요.



