임의의 파일을 처리하는 것이 얼마나 안전합니까?


77

때때로 cat실수로 이진 파일을 만들 때 터미널이 깨져 나옵니다. 신속하게 reset해결할 수있는 것은 없지만 침입자는 이론적으로 터미널에 표시 될 때 임의의 코드를 실행하는 파일을 만들 수 없습니까? 터미널 에뮬레이터 등의 악용을 통해.


3
때때로 내가 그렇게 할 때 내 쉘은 "<garbage> unknown command"의 끝에 말할 것이다. 이것이 실제로 가능한지 궁금합니다.
Keith

5
터미널 에뮬레이터 (예 : linuxsecurity.com/content/view/104657 또는 securityfocus.com/bid/6936/discuss)에 대한 익스플로잇이 있었 으므로 특별히 안전하지는 않습니다.
Ulrich Dangel

1
그렇기 때문에 파일 의 내용을 검사하기 위해 바이너리 파일 (예 :) more이나 터미널 인식 ( less) 파일을 사용하는 것이 더 좋습니다 . 터미널을 이상한 상태로 만들지 않을뿐만 아니라 전체 파일이 한 번에 날아 가지 않습니다.
Blrfl

stty sane명령은 예를 들어 다른 문자 세트로 전환 된 xterm (또는 유사한)을 재설정합니다.
Thorbjørn Ravn Andersen

mosh문서에 대한 몇 가지 생각이 있습니다 : mosh.mit.edu/#techinfo
Max Ried

답변:


34

이러한 출력을 활용할 수 있는지 여부는 터미널 프로그램 및 전송되는 이스케이프 코드에 따라 해당 터미널이 수행하는 작업에 따라 다릅니다. 나는 그러한 악용 가능한 기능을 가진 터미널 프로그램을 알지 못하며, 이제 유일한 문제는 알 수없는 버퍼 오버플로 또는 이와 유사한 것이 악용 될 수 있다는 것입니다.

일부 구형 hardware터미널의 경우 하드웨어에 해당 키의 명령 시퀀스를 저장하여 이러한 종류의 이스케이프 시퀀스로 기능 키를 프로그래밍 할 때 문제가 될 수 있습니다. 이를 활성화하려면 여전히 물리적 키 누름이 필요합니다.

그러나 Hauke가 엄청나게 '브레인 데드'라고 표시된 사람들은 항상 그러한 기능을 문제를 해결하고 자신이 만든 허점을 이해하지 못하는 경우 그러한 기능을 추가하려고합니다. 오픈 소스 소프트웨어에 대한 나의 경험에서, 코드를 보는 많은 눈으로 인해, 이것은 폐쇄 소스와 같이 일어날 가능성이 적습니다. (저는 실리콘 그래스 픽스 Irix의 메일 프로그램에서 9 세 중반에 리시버 머신에서 실행되는 명령, 실행 파일의 실제 경로 등을 포함 할 수 있습니다.)


3
"수신기 시스템에서 실행할 명령을 포함 할 수 있습니다" Windows 스크립팅 호스트를 호출하는 전자 메일 VBScript를 포함하여 어떤 의미입니까? :)
CVn

정확히 말하면 사운드 재생과 같이 이미 컴퓨터에 있던 실행 파일을 시작할 수 있습니다. 정확한 구문 (거의 20 년 전)이나 설정에서 해당 기능을 끌 수 있는지 여부는 기억 나지 않습니다. 우리는 네트워크에 저장된 자동 재생 비디오로 재미있었습니다.
Anthon

당신은 NeWS 에 대해 말하고 있지 않습니까? IIRC SGI는 마지막 보류 중 하나였습니다.
luser droog

아니 @luserdroog이 아래 표준 GUI 기반 메일 프로그램이었다 릭스
안톤

1
@Anthon 여전히 가능한지 확실하지 않지만 이스케이프 코드를 사용하여 터미널이 write명령 에서 오는 텍스트를 "반복"할 수 있으므로 터미널을 소유 한 사용자로 명령 / 스크립트를 실행할 수 있습니다. 많은 사람들이 mesg -n대부분의 시간 동안 사용자의 메시지 를 root 항상 끄도록 권장하는 이유 일 것 입니다. AFAIK, 이것은 실제로 이루어졌지만 그것이 악용되었는지는 모르겠습니다. 따라서 cat테드 실행 파일의 임의의 텍스트 가 실행될 있습니다.
Baard Kopperud

33

대부분의 터미널 에뮬레이터는 특정 이스케이프 시퀀스를 수신하면 응답을 다시 보냅니다 ( xterm 제어 시퀀스 문서 참조 ). 예를 들어, \e[0cVT100과 같은 에뮬레이터로 보낼 수 있으며 장치 속성을 다시 보냅니다. \e[?1;2c (이는 아마도 Keith가 관찰 한 것입니다.) 그러나 이러한 답변은 임의의 문자열이 아닙니다. 여전히 2c치명적인 일을하는 시스템 어딘가에 실행 파일을 갖는 것은 나쁜 생각입니다.

업데이트 : xterm 창의 제목을 설정하고 적절한 이스케이프 시퀀스를 사용 하여 제목다시 보낼 수 있기 때문에 실제로 생각보다 위험이 큽니다 ( http://www.securityfocus.com/bid/6940/ ) . 위의 예와 달리 제목은 거의 임의의 문자열 일 수 있습니다.


그것은 이미 그것을 매우 가깝게 자르고 있습니다.
Gunchars

ENQ (Ce) 문자에 대한 응답으로 더 오래된 기능인 '응답 메시지'가 있습니다. 실제 VT100에서는 사용자가 터미널의 SETUP 메뉴에서 설정합니다. 원격으로 설정할 수있는 터미널 에뮬레이터가있을 수 있습니다.
sendmoreinfo

16

PS1 과 같이 덮어 쓰지 않는 한 그놈 터미널 3.6.1의 터미널 제목이 변경됩니다 .

printf "\033]2;Script Kiddie was here\007"

이제 새로운 그놈 터미널 창을 열어서 cat버전 을 테스트하십시오 :

printf "\033]2;Script Kiddie was here\007" > test.bin
cat test.bin

그러나 이것은 또한 터미널 제목을 설정합니다.

제목이 명령 줄에 인쇄되는 이스케이프 코드 와 관련된 보안 문제가 있었으므로 cated가 인쇄 할 때 파일을 효과적으로 만들 수 있습니다 (새 줄을 넣을 수 있는지 확실하지 않습니다) 임의의 명령. 아야!


8

사용 cat하면 코드가 실행되지 않을 수도 있지만 이스케이프 코드는 처리되므로 스크립트가 실제로 악의적 일 때 무해한 것으로 생각하는 데 쉽게 착각 할 수 있습니다.

다음은 "악의적 인"쉘 스크립트를 생성 할 수있는 명령 예입니다.

echo -e '#!/bin/sh\necho "...doing something bad here..."\nexit\n\033[A\033[Aecho "Hello dear reader, I am just a harmless script, safe to run me!"' > demo.sh
chmod a+x demo.sh

파일을 검사하면 충분히 무해한 것으로 보입니다.

$ cat demo.sh
#!/bin/sh
echo "Hello dear reader, I am just a harmless script, safe to run me!"

그러나 실제로 실행해야한다면 ...

$ ./demo.sh 
...doing something bad here...

스크립트는 원시 이스케이프 코드를 포함하여 커서를 두 줄 위로 이동하므로 나머지 스크립트는 악성 코드의 맨 위에 쓰여져 숨겨집니다.

거의 모든 다른 프로그램에서 스크립트가 무엇인지 보여줄 것입니다. 파일 내용 (예 cat: moreless -r)을 처리하지 않는 프로그램 만 잘못된 결과를 생성합니다.

그 주 tailhead같은 잘못된 출력을 생성합니다. 따라서 "less + F"를 사용하는 것이 "tail -f"보다 안전합니다.


이것은 매우 문제가 있습니다 ... echo $(cat demo.sh), cat demo.sh | grep . --color=yes(참고 : --color=yes여기에 "악의적 인"코드가 표시되는 것) 또는 내장 을 실행하여 실제로 진행중인 작업을 확인할 수 있습니다 cat -v demo.sh.
Charlie

참 또는 거짓, 다른 질문에 대한 답입니다 . cat파일의 내용 을 표시하는 데 얼마나 신뢰할 수 있습니까 ?
Incnis Mrsi

@IncnisMrsi : 다른 질문에 대한 답은 아닙니다. 이 답변은 cat이 이스케이프 코드를 표시하고 한 가지 유형의 이스케이프 코드 만있는 간단한 예제를 제공하지만 다른 많은 코드가 있음을 경고합니다. 특정 터미널과 결합하면 키를 다시 매핑하고 파일을 덮어 쓸 수 있으며 이론 상으로는 명령을 실행할 수도 있습니다. 따라서 이스케이프 코드가 표시 될 위험이 있음을 알게되면 cat질문에 따라 임의의 파일 에 대해 안전하지 않을 수 있음을 이해하게 될 것입니다 .
Malvineous

6

나는 xterm마치 마치 마치 마치 임의의 문자를 입력하는 것을 경험했습니다. 때로는 개행 문자가 포함되어있어 ngwerm:0riu: command not found응답으로 사용되었습니다. 누군가가 특정하고 유해한 명령을 보내는 파일을 만들 수없는 이유는 없습니다. 따라서 적어도 일부 터미널은 임의의 영향을받는 공격에 취약합니다.


2

터미널 에뮬레이터는 기본적으로 단순히 전송 된 문자를 인쇄합니다.

새 위치 설정, 색상 변경, 제목 변경 등과 같이 현재 위치에 문자를 단순히 인쇄하는 것 외에는 이스케이프 시퀀스를 사용하여 수행됩니다.

지원되는 이스케이프 시퀀스 세트는 일반적으로 다른 프로세스를 시작하는 방법을 정의하지 않는 ANSI 와 같이 잘 정의 된 표준으로 구성 됩니다. 그러한 시퀀스를 구현하는 것이 가능하지만 의도적으로 그러한 것을 허용하는 터미널 에뮬레이터를 알지 못합니다.

이론적으로 버퍼 오버플로와 같은 버그는 임의의 기능을 트리거하는 데 사용될 수 있습니다. 그러나 이것은 다른 바이너리에서도 가능할 것입니다.


0

일반적으로 임의 파일을 캐스팅 할 위험이 없습니다. 파일을 분석하는 일반적인 방법은 다음을 수행하는 것입니다.

$ file <mystery file>
$ strings <mystery file> | less

위의 file명령을 통해 파일 형식을 결정할 strings수 있으며 명령을 사용하면 식별 할 수없는 바이너리 파일에서 식별 가능한 문자열을 덤프 할 수 있습니다.

파일 출력
$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
문자열 출력
$ strings /bin/ls|less
...
across
vertical
single-column
force
never
auto
if-tty
slash
%b %e  %Y
%b %e %H:%M
long-iso
main
posix-
sort_files
?pcdb-lswd
dev_ino_pop
Try `%s --help' for more information.
Usage: %s [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort.
Mandatory arguments to long options are mandatory for short options too.
  -a, --all                  do not ignore entries starting with .
  -A, --almost-all           do not list implied . and ..
...

3
알 수없는 파일에서 문자열을 실행하면 문제가 발생할 수 있습니다. lcamtuf.blogspot.fi/2014/10/…
Jan Wikholm

@IncnisMrsi-첫 문장을 읽어보세요 !!!!
slm

좋아, 이전 진술을 철회, 대답은 짧고 혼란스러운 용어를 사용하고 근거가 없으며 불완전합니다. 보안에서 즐겨 사용하는 OS에 배포 된“임의”≠ 임의입니다.
Incnis Mrsi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.