콘솔 애플리케이션이 실제로 종료되었는지 확인

콘솔 애플리케이션이 실제로 종료되었는지 확인

콘솔 응용 프로그램을 시작하고 완료하면 셸 프롬프트가 다시 나타납니다. 하지만 실제 명령 프롬프트인지 어떻게 확인할 수 있나요? 예를 들어, 앱이 "키로거"이고 종료하려고 할 때 잘못된 프롬프트가 실행되면 어떻게 되나요?

그렇다면 내가 누구인지 어떻게 알 수 있습니까?실제로순수 쉘(예: bash) 프롬프트에서?

답변1

기술적으로는 귀하의 질문에 답변해 드리겠습니다. 쉘로 돌아왔는지 확인하는 방법은 무엇입니까?해당 프로그램이 악성이 아니라고 판단되는 경우하지만 다른 셸을 실행하고 있다고 생각되면 비밀 콘텐츠가 포함된 비밀 함수를 수동으로 정의할 수 있습니다(물론 내보내지는 않습니다).

$ my_secret_func() { echo "Still alive"; }
$ ~/Downloaded/dubious_program
$ my_secret_func
Still alive

악의적 인 경우 dubious_program입력 내용을 원래 셸에 전달하고 반응하도록 하여 쉽게 속일 수 있습니다. 보다 일반적으로, 안전하지 않은 실행 파일이 사용자를 대신하여 키로거를 설치하는(그리고 다른 많은 악의적인 작업을 수행하는) 방법(예: 사용자의 ID 내에 자체 설치)이 많이 있습니다 ~/.bashrc. 뚜렷한 영향이 없더라도 이를 수행할 수 있습니다. 실제로 대부분의 맬웨어는 탐지 위험을 최소화하기 위해 즉시 눈에 보이는 영향을 미치지 않으려고 합니다.

따라서 실행 중인 작업이 안전한지 확실하지 않은 경우 nobody사용자와 함께 샌드박스에서 실행하거나 전혀 실행하지 마세요.

답변2

쉘이 반환되었는지 확인하는 방법

명령을 실행하기 전과 후에 쉘의 PID를 비교하십시오(동일한 PID는 동일한 쉘을 의미함).

$ echo $$
6215
$ bash --posix
bash-4.3$ echo $$
10230
bash-4.3$ exit
$ echo $$
6215

위의 데모에서는 애플리케이션(이 경우에는 bash또 다른 POSIX 모드 애플리케이션)을 실행하는 것을 볼 수 있습니다. 반환되면 우리가 사용한 쉘의 PID가 동일한지 확인하므로 이것이 실제 쉘이라고 가정할 수 있습니다. 물론 이는 $$쉘 프롬프트에 다음을 추가하여 자동화할 수 있습니다.

$ PS1="[$$] $PS1 "
[6215] $

테마 변경은 sha256sum이전과 이후(또는 예를 들어 다른 체크섬)를 확인하여 수행할 수 있습니다. md5모르는 경우 Sha-sum은 일반적으로 파일, 특히 다운로드 및 iso이미지의 무결성을 확인하는 데 사용됩니다. 아래 데모에서는 /proc/<SHELL PID>/exe실제 바이너리에 대한 심볼릭 링크인 파일을 사용합니다(이 경우에는 내 쉘이 됩니다 mksh). 이 방법으로 우리가 실행 중인 실행 파일이 동일한지 확인할 수 있습니다.

[12107][xieerqi][21:34]:
$ sha256sum /proc/$$/exe
70a16895186ddfac12343e816f05783cf60092c0980fc20c2ae4bc53b48f28e6  /proc/12107/exe

[12107][xieerqi][21:34]:
$ bash --posix
bash-4.3$ sha256sum /proc/$$/exe
c2615a71ff5c004e51aef248103a2950c25715f5eb8130837695770e1d78ecfa  /proc/12434/exe
bash-4.3$ exit

[12107][xieerqi][21:35]:
$ sha256sum /proc/$$/exe
70a16895186ddfac12343e816f05783cf60092c0980fc20c2ae4bc53b48f28e6  /proc/12107/exe

쉘로 돌아가는 것이 안전을 보장하지는 않습니다.

키로거의 경우,반드시 쉘 안에 있을 필요는 없습니다.. 그래픽 터미널 에뮬레이터를 사용하는 경우 키로거는 사용 중인 쉘에 관계없이 모든 창에 전송된 키 입력을 간단히 수신할 수 있습니다.

셸 자체에 관한 한 프로세스는 백그라운드에서 시작될 수 있습니다. 예를 들어, 쉘 스크립트는 아래와 같이 & 기호를 사용합니다 command & .백그라운드에서 무언가 시작하기. 백그라운드 프로세스가 여전히 키를 읽을 수 있는지는 확실하지 않지만 셸이 종료된다고 해서 애플리케이션이 종료되었음을 보장하는 것은 아닙니다. 아래의 작은 데모에서는 백그라운드에서 시작하는 함수와 종료되는 것처럼 보이는 스크립트를 볼 수 있지만 함수는 여전히 매초마다 out.txt에 씁니다.

[10754][xieerqi][21:12]:
$ cat launch_background_app.sh

#!/bin/bash

run_in_background()
{
    while true;
    do
       date +%s > out.txt
       sleep 1
    done
}

run_in_background &

[10754][xieerqi][21:12]:
$ ./launch_background_app.sh

[10754][xieerqi][21:12]:
$ cat out.txt
1484280777

[10754][xieerqi][21:12]:
$ cat out.txt
1484280778

[10754][xieerqi][21:12]:
$ cat out.txt
1484280779

편집자 참고 사항: 내 예에서 힌트를 제거하지 마십시오. 이는 쉘 PID가 동일하게 유지된다는 것을 보여주기 위한 데모용입니다.

첨부된:보안은 신뢰할 수 있는 애플리케이션 설치에서 시작되므로 애플리케이션의 무결성 보장을 고려하세요.앞으로먼저 사용하십시오.

답변3

키로거는 쉘 프롬프트를 위조하려고 시도하지 않으며 거의 ​​확실하게 모니터링 백그라운드 프로세스 또는 유사한 프로세스를 남깁니다 /dev/input(또한 프로세스 목록에서 자신을 숨기려고 시도합니다). 당신은 분명히 문제를 잘못된 방향으로 보고 있습니다.

신뢰할 수 없는 바이너리를 실행하는 일반적인 방법은 가상 머신을 설정하고 그 안에서 실행하는 것입니다. 이것이 100% 보안을 제공하지는 않더라도 일반적으로 실제 사용하기에 충분히 안전한 것으로 간주됩니다(물론 프로덕션 서버나 은행의 보호되는 네트워크 가상 머신 내에서 신뢰할 수 없는 코드가 있는 서버를 실행하지 않을 것입니다).

답변4

 suspect-command; echo I am thinking of the number 43987

echo는 명령이 종료된 후에 실행됩니다. 명령 프롬프트 위 줄에 결과가 표시됩니다.

관련 정보