logo

해시

우선 기본적인 것부터 시작하여 '해시(hash)'라는 개념에 대해 알아보겠습니다!

해시 알고리즘 - 임의의 크기의 데이터를 입력받아 해시 또는 메시지 다이제스트라고 불리는 출력을 생성하는 수학적 함수입니다. 출력은 입력 데이터의 고유한 표현으로, 데이터가 변조되지 않았음을 확인하는 데 사용될 수 있습니다. 해시 알고리즘은 데이터의 무결성 및 진위성을 보장하는 데 사용됩니다. 간단히 말해, 해시는 데이터의 고유한 디지털 지문입니다. 그것은 데이터를 대표하는 코드와 같습니다. 이 코드는 해시 함수라고 불리는 수학적 함수에 의해 생성됩니다. 데이터가 조금이라도 변경되면 해시는 달라집니다.

해시에는 기본적인 키 특성이 있습니다:

  1. 결정론적: 해시 함수는 주어진 입력에 대해 항상 동일한 출력을 생성해야 합니다. 이는 같은 데이터를 두 번 해시하면 두 번 모두 같은 해시 값을 얻어야 한다는 것을 의미합니다.

  2. 역산 불가능성: 해시 값에서 원래 입력 데이터를 재구성하는 것이 계산상으로 실행 불가능해야 합니다. 이 특성은 보안에 중요하며 해시 값에만 접근 가능한 공격자로부터 원본 데이터를 보호합니다.

  3. 균일성: 해시 함수는 모든 가능한 입력에 대해 해시 값의 균일한 분포를 생성해야 합니다. 이는 각 해시 값이 발생할 가능성이 동일해야 하며 해시 값 분포에서 패턴이나 편향이 없어야 함을 의미합니다.

  4. 예측 불가능성: 다른 입력의 해시 값이나 해시 함수 자체의 특성을 바탕으로 입력의 해시 값을 예측하는 것이 계산상으로 실행 불가능해야 합니다. 이 특성은 보안에 중요하며, 공격자가 충돌(동일한 해시 값을 생성하는 두 개의 다른 입력)을 생성하는 것을 어렵게 만듭니다.

  5. 역산 불가능성: 해시 값에서 원래 입력 데이터를 재구성하는 것이 계산상으로 실행 불가능해야 합니다. 이 특성은 보안에 중요하며 해시 값에만 접근 가능한 공격자로부터 원본 데이터를 보호합니다.

  6. 충돌 공격에 대한 저항성: 해시 함수는 동일한 해시 값을 생성하는 두 개의 다른 입력을 찾는 충돌 공격에 저항력이 있어야 합니다. 충돌 공격은 부정한 디지털 서명을 생성하거나 접근 제어를 우회하는 데 사용될 수 있으므로, 해시 함수가 이를 저항하도록 설계되는 것이 중요합니다.

해시의 다른 특성들은 위키백과 페이지에서 확인할 수 있습니다:

https://en.wikipedia.org/wiki/Hash_function

 

데이터 검증. 블랙리스트와 화이트리스트.

바이러스 백신 소프트웨어의 맥락에서 해시 알고리즘은 멀웨어를 감지하거나 거짓 긍정 경고를 제외하는 데 사용됩니다. 바이러스 백신 소프트웨어는 알려진 멀웨어 해시(블랙리스트)와 신뢰할 수 있는 소프트웨어 해시(화이트리스트)의 데이터베이스를 유지합니다. 파일을 스캔할 때 해당 파일의 해시는 데이터베이스의 해시와 비교됩니다. 데이터 검증에 가장 일반적으로 사용되는 해시 알고리즘은 MD5, SHA-1, SHA-256 및 SHA-512입니다.

안티바이러스의 블랙리스트와 화이트리스트에서 해시를 사용하는 것은 안티바이러스 프로그램이 각 파일을 자세히 분석할 필요 없이 스캔 프로세스를 가속화하는 데 도움이 됩니다. 대신, 파일의 해시 값들을 블랙리스트/화이트리스트에 있는 해시 값들과 비교하여 알려진 위협이나 신뢰할 수 있는 앱을 신속하게 식별할 수 있습니다.

블랙리스트. 사이버 보안 및 안티바이러스 소프트웨어의 맥락에서, 블랙리스트는 알려진 악성 파일 또는 이 파일들의 일부를 포함하는 목록입니다. 안티바이러스 프로그램이 컴퓨터나 네트워크를 검사할 때, 그것은 만나는 파일 및 엔티티를 블랙리스트와 비교하여 어떤 위협을 식별합니다. 파일이나 엔티티가 블랙리스트의 항목과 일치하는 경우, 안티바이러스 프로그램은 이를 제거하거나 격리하여 해를 끼치지 않도록 조치를 취합니다.

블랙리스트는 알려진 위협을 감지하고 방지하는 데 유용할 수 있지만, 새롭고 알려지지 않은 위협으로부터 효과적으로 보호하는 데는 항상 그렇지 않습니다. 공격자는 난독화나 다형성과 같은 다양한 기술을 사용하여 파일이나 엔터티의 코드나 행동을 수정하여 바이러스 백신 프로그램의 감지를 회피할 수 있습니다.

따라서, 안티바이러스 프로그램은 종종 화이트리스팅 및 행동 기반 감지와 같은 다양한 기술을 조합하여 블랙리스트의 사용을 보완하고 더 넓은 범위의 위협에 대해 더 포괄적인 보호를 제공합니다.

화이트리스트. 사이버보안 및 안티바이러스 소프트웨어의 맥락에서 화이트리스트는 안전하다고 알려진 신뢰할 수 있는 파일 목록입니다. 파일이나 엔티티가 화이트리스트에 있는 항목과 일치하면 안티바이러스 프로그램은 해당 파일이 안전하다고 간주되어 아무런 조치를 취하지 않고 열기/실행을 허용합니다.

화이트리스트는 안티바이러스 및 보안 프로그램에서 잘못된 긍정적 결과를 방지하는데 유용합니다. 잘못된 긍정적 결과란 프로그램이나 파일이 실제로 안전할 때 악성이거나 해로운 것으로 표시되는 경우를 말합니다. 화이트리스트를 사용함으로써 보안 프로그램은 이러한 잘못된 긍정적 결과를 우회할 수 있어, 시간을 절약하고 불필요한 경보를 방지할 수 있습니다.

 

해시와 블랙리스트/화이트리스트를 사용하는 것은 알려진 위협으로부터 보호하고 바이러스 백신 및 보안 프로그램에서 잘못된 경고를 방지하는 효과적인 방법이 될 수 있습니다.

 

안티바이러스는 여러 해시 알고리즘을 사용하는 이유는 무엇인가요?

안티바이러스 프로그램들이 여러 가지 해시 알고리즘을 사용하는 이유는 몇 가지가 있습니다:

  1. 블랙리스트는 알려진 위협을 탐지하고 방지하는 데 효과적일 수 있지만, 완벽하지 않습니다. 공격자는 데이터를 수정하여 블랙리스트의 서명과 일치하지 않게 함으로써 탐지를 회피할 수 있는 다양한 기술을 사용할 수 있습니다. 이러한 기술은 "충돌 공격"으로 명명됩니다. 충돌 공격은 공격자가 해시 함수를 통해 실행될 때 동일한 해시 값을 생성하는 두 개의 다른 입력, 예를 들어 파일이나 메시지를 찾으려고 하는 암호화 공격 유형입니다. 충돌 공격의 목표는 디지털 서명, 비밀번호 인증 또는 데이터 무결성 검사와 같이 해시 값의 무결성에 의존하는 시스템을 잘못 사용할 수 있는 입력 쌍을 만드는 것입니다. 공격자가 충돌을 찾을 수 있다면, 그는 해시 함수에 의존하는 보안 조치를 우회하는 데 사용할 수 있습니다. 충돌 공격의 위험을 완화하기 위해, 안티바이러스는 공격에 강한 해시 함수를 사용하고 동시에 여러 해시 함수를 사용합니다. 예를 들어, 안티바이러스 프로그램이 MD5 해시 알고리즘만 사용하는 경우, 공격자는 정상 파일과 동일한 MD5 해시를 가진 악성 파일을 만들 수 있으며, 안티바이러스 프로그램이 악성 파일을 안전하게 처리하도록 속일 수 있습니다. 하지만 MD5, SHA-1, SHA-256과 같은 여러 해시 알고리즘을 사용하면 공격자가 모든 알고리즘에 동시에 효과적인 충돌 공격을 만들기 어렵게 만듭니다.

  2. 효율성: 다른 해시 알고리즘은 다른 계산 요구 사항을 가지고 있으며, 파일 크기, 유형 또는 기타 요인에 따라 일부는 다른 것보다 더 효율적일 수 있습니다. 다중 해시 알고리즘을 사용함으로써 안티바이러스 프로그램은 주어진 상황에 가장 적합한 알고리즘을 선택할 수 있으며, 이는 시간과 처리 성능을 절약할 수 있습니다. 예를 들어, SHA-256은 MD5보다 더 많은 계산이 필요할 수 있으므로 안티바이러스 프로그램은 작은 파일에는 MD5를 사용하고 큰 파일에는 SHA-256을 사용할 수 있습니다.

  3. 유연성: 다양한 해시 알고리즘은 다른 사용 사례와 응용 프로그램을 위해 설계되었습니다. 다중 해시 알고리즘을 사용함으로써 안티바이러스 프로그램은 맬웨어 탐지, 파일 무결성 검증, 조작 또는 수정 감지와 같은 다양한 필요와 상황에 적응할 수 있습니다. 예를 들어, 법의학 조사관은 조사 중 데이터가 수정되지 않았음을 보장하기 위해 안티바이러스 프로그램과 다른 해시 알고리즘을 사용할 수 있습니다.

 

여러 해시 알고리즘을 사용하는 것은 사이버 보안 및 안티바이러스 소프트웨어 개발에서의 모범 사례로, 이는 사이버 위협을 탐지하고 방지하는 데 있어 견고성, 호환성, 효율성 및 유연성을 제공합니다.

 

바이러스 백신은 어떻게 비슷하지만 동일하지 않은 데이터와 파일을 인식하나요?

 

유사하지만 동일하지 않은 파일들은 사이버보안에서 문제가 될 수 있습니다. 이 파일들이 공격자들에 의해 바이러스 백신 소프트웨어의 탐지를 회피하는 데 사용될 수 있기 때문입니다.

예를 들어, 공격자는 알려진 멀웨어 파일을 가져와 코드나 구조를 약간 수정할 수 있습니다. 예를 들어 변수 이름을 변경하거나 지시사항 순서를 재배열하는 것 같은 수정입니다. 이러한 수정은 원본 멀웨어 파일과 유사하지만 동일하지 않은 새 파일을 만들기에 충분할 수 있으며, 전통적인 해시 기반 탐지 방법에 의존하는 바이러스 백신 소프트웨어에서 감지되지 않을 수 있습니다.

또한, 공격자는 유사하면서도 동일하지 않은 파일들을 사용하여 각각의 감염 때마다 코드나 구조를 변경하여 탐지를 피할 수 있는 다형성 악성 소프트웨어를 생성할 수 있습니다. 다형성 악성 소프트웨어는 특정 패턴이나 악성 소프트웨어 코드의 서명을 인식하는 것에 의존하는 전통적인 안티바이러스 기법을 사용하여 탐지하기 매우 어려울 수 있습니다.

이 문제를 해결하기 위해, 안티바이러스는 퍼지 해시를 사용합니다.

 

Fuzzy hashing은 일부 안티바이러스 소프트웨어에서 비슷하지만 동일하지 않은 파일, 포함하여 변형 맬웨어를 감지하는 데 사용되는 기술입니다. 파일을 작은 조각으로 나누고 그 조각들의 해시를 다른 파일들의 해시와 비교함으로써, fuzzy hashing은 코드나 구조가 유사한 파일들을 식별할 수 있습니다, 심지어 그들이 동일하지 않더라도 말입니다.

Fuzzy 해싱은 파일 전체에서 자주 나타나는 바이트 시퀀스를 식별하는 방식으로 작동합니다. 이러한 시퀀스는 "chunks"라고도 하며, 암호화 해시 함수를 사용하여 해시 값을 생성하기 위해 해싱됩니다. 그런 다음 이 chunks의 해시 값들은 다른 파일들의 것과 비교하여 유사한 chunks를 식별합니다.

fuzzy hashing의 장점은 파일이 수정되거나 은폐되었을 때에도 유사성을 감지할 수 있으며, 이는 알려진 멀웨어의 변형을 식별하는 데 강력한 도구가 됩니다. 예를 들어, 공격자가 변수나 함수의 이름을 변경하여 알려진 멀웨어 파일을 수정한 경우, 전통적인 해시 기반 감지 방법은 수정된 파일을 감지하지 못할 수 있습니다. 그러나 fuzzy hashing은 원본 멀웨어 파일의 유사한 청크를 식별함으로써 수정된 파일을 여전히 감지할 수 있습니다. MD5, SHA-1 또는 SHA-512와 같은 암호화 해싱 알고리즘과 달리, fuzzy hashing 알고리즘은 입력 데이터의 유사성에 기초하여 가변 길이의 해시 값을 생성합니다.

 

퍼지 해시의 장점:

  1. 유사한 파일 감지: 퍼지 해시는 약간의 수정이 있더라도 유사한 파일을 감지할 수 있으며, 이는 알려진 멀웨어의 변형을 식별하는 데 유용합니다.

  2. 거짓 긍정 감소: 퍼지 해시는 전통적인 해시 기반 감지 방법으로 생성되는 거짓 긍정의 수를 줄일 수 있습니다. 이는 퍼지 해시가 알려진 멀웨어와 유사하지만 동일하지 않은 파일을 감지할 수 있기 때문입니다.

  3. 난독화에 대한 강인성: 퍼지 해시는 공격자가 감지를 회피하기 위해 사용하는 난독화 기법에 대해 더 강력합니다. 이는 퍼지 해싱 알고리즘이 파일을 작은 조각으로 나누고 각 조각에 대해 해시를 생성하기 때문에, 공격자가 감지를 회피할 수 있도록 파일을 수정하는 것이 더 어렵기 때문입니다.

Fuzzy 해싱은 유사하지만 동일하지 않은 파일을 감지하는 데 있어 효과에 영향을 줄 수 있는 몇 가지 한계가 있습니다:

  1. 거짓 양성: 퍼지 해싱은 유사 코드나 구조를 가진 악성 코드로 인식될 수 있는 정상 파일을 오진하는 거짓 양성을 일으킬 수 있습니다. 이는 파일이 공통 라이브러리나 프레임워크를 공유하는 경우 발생할 수 있습니다.

  2. 성능: 퍼지 해싱은 특히 큰 파일을 처리할 때 많은 계산을 요구할 수 있습니다. 이는 스캐닝 과정을 느리게 하고 시스템 성능에 영향을 줄 수 있습니다.

  3. 크기 제한: 퍼지 해싱은 매우 작은 파일이나 엔트로피가 낮은 파일에는 잘 작동하지 않을 수 있습니다. 충분히 유니크한 청크를 생성할 수 없기 때문에 의미 있는 해시를 생성하기 어려울 수 있습니다.

  4. 조작: 공격자가 특정해서 퍼지 해싱을 피하도록 파일을 수정한다면 퍼지 해싱은 효과적이지 않을 수 있습니다. 예를 들어, 공격자는 파일의 구조를 고의적으로 변경하여 퍼지 해싱에 의해 식별되지 않도록 할 수 있습니다.


 

암호학적 해시 알고리즘과 퍼지 해시 알고리즘의 차이점은 무엇인가요?

암호 해시 알고리즘과 퍼지 해시 알고리즘은 모두 사이버 보안에 사용되지만, 그 목적과 특성이 다릅니다.

암호화 해시 알고리즘, 예를 들어 SHA-256 및 MD5는 고정 길이의 고유 해시 값을 생성하여 데이터의 무결성과 진위를 제공하도록 설계되었습니다. 이 해시 값은 역설계하기 거의 불가능합니다. 암호화 해시 알고리즘은 데이터의 무결성을 검증하는 데 사용됩니다.

Fuzzy 해시 알고리즘, 예를 들어 SSDEEP,은 변경되었거나 맬웨어 제작자에 의해 재포장된 파일과 같은 유사하지만 동일하지 않은 데이터를 식별하도록 설계되었습니다. Fuzzy 해싱은 슬라이딩 윈도우 기법을 사용하여 데이터를 작은 청크로 나누고 가변 길이, 확률적 해시를 생성하여 알려진 맬웨어 해시 데이터베이스와 비교함으로써 잠재적으로 악의적인 파일을 식별합니다.

암호화 해시 알고리즘은 충돌 방지를 목적으로 설계되어 있어, 동일한 해시 출력을 생성하는 두 입력을 찾기가 매우 어렵습니다. 퍼지 해시 알고리즘은 유일한 해시 출력을 생성하는 것이 아니라 파일 간의 유사성을 감지하도록 설계되었기 때문에 충돌 방지가 필요하지 않습니다.

암호화 해시 알고리즘과 퍼지 해시 알고리즘의 주요 차이점은 그들의 결정성 수준에 있습니다. 암호화 해시 알고리즘은 각 입력에 대해 고유한 고정 길이의 결정적 해시를 생성하는 반면, 퍼지 해시 알고리즘은 유사한 입력에 대해 유사한 가변 길이의 확률적 해시를 생성합니다.

 

우리의 솔루션에서 사용할 퍼지 해싱 알고리즘은 무엇인가요?

 

저희 솔루션에서는 SSDEEP와 TLSH를 사용할 예정입니다.

 

ssdeep 는 유사하지만 동일하지 않은 데이터, 예를 들어 멀웨어 변종을 식별하는 데 사용되는 퍼지 해싱 알고리즘입니다. 이는 입력 데이터의 유사성을 나타내는 해시 값을 생성하여, 암호화 해시 함수와 같은 고유 식별자가 아닌 값을 제공합니다. ssdeep의 출력은 가변 길이이며 확률적이므로, 두 파일 간의 미세한 차이도 감지할 수 있습니다. ssdeep는 주로 멀웨어 분석 및 탐지에 사용되며, 다양한 보안 도구 및 안티바이러스 소프트웨어에도 통합되어 있습니다.

 

TLSH (Trend Micro Locality Sensitive Hash)는 유사하지만 동일하지 않은 데이터, 예를 들어 맬웨어 변종을 식별하기 위해 사용되는 퍼지 해싱 알고리즘입니다. 이것은 입력 데이터의 고유 특성, 예를 들어 바이트 빈도와 순서를 포착하는 해시 값을 생성함으로써 작동합니다. TLSH의 출력은 가변 길이이며 확률적이어서 입력 데이터가 수정되거나 난독화되었을 경우에도 유사성을 감지할 수 있습니다. TLSH는 맬웨어 분석 및 탐지에서 일반적으로 사용되며, 다양한 보안 도구 및 안티바이러스 소프트웨어에도 통합되어 있습니다.

 

ssdeep와 TLSH는 모두 거리 측정을 사용하여 두 해시 값 사이의 유사성을 결정합니다. 그러나 ssdeep와 TLSH가 사용하는 거리 측정은 서로 다릅니다.

ssdeep는 "fuzzy hash distance" 지표를 사용하여 두 해시 값 사이의 거리를 계산합니다. 이 거리 지표는 두 해시 간의 일치하는 블록과 일치하지 않는 블록의 수 및 해시의 크기를 기반으로 합니다. 거리 지표는 0부터 100까지의 백분율 값으로, 0은 두 해시가 동일하다는 것을 의미하고, 100은 두 해시가 완전히 다르다는 것을 의미합니다.

TLSH는 반면에 "total diff" 메트릭을 사용하여 두 해시 값 사이의 거리를 계산합니다. 이 거리 메트릭은 두 입력 데이터 세트의 지역 민감 특성 사이의 차이를 기반으로 합니다. "total diff" 메트릭의 결과는 0부터 1000 사이의 값으로, 0은 두 해시 값이 동일함을 의미하고, 1000은 두 해시 값이 완전히 다름을 의미합니다.

 

해싱 모듈 구축

우리의 해결책을 위해, 우리는 오픈 소스 라이브러리를 사용할 것입니다:

    1. PolarSSL: https://polarssl.org/

PolarSSL은 전송 계층 보안(TLS), 보안 소켓 계층(SSL), 데이터그램 전송 계층 보안(DTLS)과 같은 암호화 프로토콜을 구현하기 위한 무료 및 오픈 소스 소프트웨어 라이브러리입니다. 이는 해시 함수, 대칭 및 비대칭 암호화, 디지털 서명, 키 교환 알고리즘을 포함한 다양한 암호화 알고리즘 및 프로토콜을 제공합니다. PolarSSL은 경량이며 효율적으로 설계되어 자원이 제한된 환경에서의 사용에 적합합니다.

    2. ssdeep: http://ssdeep.sf.net/

    3. TLSH: https://github.com/trendmicro/tlsh/

프로젝트에 라이브러리를 구현한 후, 간단한 코드를 추가합니다:

struct HashData
{
   	BYTE  md5[16];
   	BYTE  sha1[20];
   	BYTE  sha512[64];
   	std::string ssdeep;
   	std::string tlsh;
};

HashData hash(const void* buff, uint64_t size)
{
   	HashData snap = {};

   	hashes::md5(buff, size,  snap.md5);
   	hashes::sha1(buff, size, snap.sha1);
   	hashes::sha4(buff, size, snap.sha512);

   	snap.ssdeep = hashes::ssdeepHash(buff, size);
   	snap.tlsh   = hashes::tlshHash(buff, size);

   	return snap;
}

 

해싱 모듈 확인

 

해싱 모듈을 테스트할 시간입니다! 이를 수행하기 위해 다음 내용을 포함하는 텍스트 파일을 생성할 것입니다:

All the World`s a Stage by William Shakespeare
All the world`s a stage,
And all the men and women merely players;
They have their exits and their entrances,
And one man in his time plays many parts,
His acts being seven ages. At first, the infant,
Mewling and puking in the nurse`s arms.
Then the whining schoolboy, with his satchel
And shining morning face, creeping like snail
Unwillingly to school. And then the lover,
Sighing like furnace, with a woeful ballad
Made to his mistress` eyebrow. Then a soldier,
Full of strange oaths and bearded like the pard,
Jealous in honor, sudden and quick in quarrel,
Seeking the bubble reputation
Even in the cannon`s mouth. And then the justice,
In fair round belly with good capon lined,
With eyes severe and beard of formal cut,
Full of wise saws and modern instances;
And so he plays his part. The sixth age shifts
Into the lean and slippered pantaloon,
With spectacles on nose and pouch on side;
His youthful hose, well saved, a world too wide
For his shrunk shank, and his big manly voice,
Turning again toward childish treble, pipes
And whistles in his sound. Last scene of all,
That ends this strange eventful history,
Is second childishness and mere oblivion,
Sans teeth, sans eyes, sans taste, sans everything.

 

테스트 1: 동일한 내용(위의 텍스트)을 포함한 두 개의 똑같은 파일을 생성하고 해시를 계산하세요.

SSDEEP는 파일이 100% 동일하다고 말합니다. TLSH는 파일 간에 차이가 0%라고 말합니다.

 

테스트 2: 동일한 내용의 두 파일을 생성하고 두 번째 파일을 변경한 후 해시 계산하기

두 번째 파일 내용:

All the World`s a Stage by William Shakespeare
O lovely maidens, fall in love,
But not with Muscovites,
For Muscovites are foreign folk,
They do not treat you right.
A Muscovite will love for sport,
And laughing go away;
They have their exits and their entrances,
And one man in his time plays many parts,
His acts being seven ages. At first, the infant,
Mewling and puking in the nurse`s arms.
Then the whining schoolboy, with his satchel
And shining morning face, creeping like snail
Unwillingly to school. And then the lover,
Sighing like furnace, with a woeful ballad
Made to his mistress` eyebrow. Then a soldier,
Full of strange oaths and bearded like the pard,
Jealous in honor, sudden and quick in quarrel,
Seeking the bubble reputation
Even in the cannon`s mouth. And then the justice,
In fair round belly with good capon lined,
With eyes severe and beard of formal cut,
Full of wise saws and modern instances;
And so he plays his part. The sixth age shifts
Into the lean and slippered pantaloon,
With spectacles on nose and pouch on side;
His youthful hose, well saved, a world too wide
For his shrunk shank, and his big manly voice,
Turning again toward childish treble, pipes
And whistles in his sound. Last scene of all,
That ends this strange eventful history,
Is second childishness and mere oblivion,
Sans teeth, sans eyes, sans taste, sans everything.

SSDEEP는 파일이 88% 동일하다고 말합니다. TLSH는 파일 간의 차이가 4.7%라고 말합니다.

 

테스트 3: 완전히 다른 두 텍스트 파일에 대한 해시 계산하기

두 번째 파일 내용:

"Katerina", poem of Taras Shevchenko
(translated by John Weir)

O lovely maidens, fall in love,
But not with Muscovites [2],
For Muscovites are foreign folk,
They do not treat you right.
A Muscovite will love for sport,
And laughing go away;
He`ll go back to his Moscow land
And leave the maid a prey
To grief and shame...
It could be borne
If she were all alone,
But scorn is also heaped upon
Her mother frail and old.
The heart e`en languishing can sing –
For it knows how to wait;
But this the people do not see:
“A strumpet!“ they will say.
O lovely maidens, fall in love,
But not with Muscovites,
For Muscovites are foreign folk,
They leave you in a plight.
Young Katerina did not heed
Her parent`s warning words,
She fell in love with all her heart,
Forgetting all the world.    

The orchard was their trysting-place;
She went there in the night
To meet her handsome Muscovite,
And thus she ruined her life.
Her anxious mother called and called
Her daughter home in vain;
There where her lover she caressed,
The whole night she remained.
Thus many nights she kissed her love
With passion strong and true,
The village gossips meanwhile hissed:
“A girl of ill repute!”
Let people talk, let gossips prate,
She does not even hear:
She is in love, that`s all she cares,
Nor feels disaster near.
Bad tidings came of strife with Turks,
The bugles blew one morn:
Her Muscovite went off to war,
And she remained at home.
A kerchief o`er her braids they placed
To show she`s not a maid,
But Katerina does not mind,
Her lover she awaits.
He promised her that he’d return
If he was left alive,
That he`d come back after the war –
And then she`d be his wife,
An army bride, a Muscovite
Herself, her ills forgot,
And if in meantime people prate,
Well, let the people talk!
She does not worry, not a bit –
The reason that she weeps
Is that the girls at sundown sing
Without her on the streets.
No, Katerina does not fret –
And jet her eyelids swell,
And she at midnight goes to fetch

The water from the well
So that she won`t by foes be seen;
When to the well she comes,
She stands beneath the snowball-tree
And sings such mournful songs,
Such songs of misery and grief,
The rose .itself must weep.
Then she comes home - content that she
By neighbours was not seen.
No, Katerina does not fret.
She`s carefree as can be -
With her new kerchief on her head
She looks out on the street.
So at the window day by day
Six months she sat in vain....
With sickness then was overcome,
Her body racked with pain.
Her illness very grievous proved.
She barely breathed for days ...
When it was over - by the stove
She rocked her tiny babe.
The gossips` tongues now got free rein.
The other mothers jibed
That soldiers marching home again
At her house spent the night.
“Oh, you have reared a daughter fair.
And not alone beside
The stove she sits - she`s drilling there
A little Muscovite.
She found herself a brown-eyed son...
You must have taught her how!...
Oh fie on ye, ye prattle tongues,
I hope yourselves you`ll feel
Someday such pains as she who bore
A son that you should jeer!
Oh, Katerina, my poor dear!
How cruel a fate is thine!

SSDEEP는 파일이 완전히 다르며, 일치하는 부분이 0%라고 말합니다. 그러나 TLSH는 파일이 27.1%만 다르다고 말합니다.

 

왜 그럴까요? 결국 우리는 완전히 다른 두 텍스트 파일 사이의 거리를 고려하고 있지 않나요?

 

위에서 언급했듯이, TLSH 알고리즘은 빈도수를 고려합니다.

텍스트가 서로 다름에도 불구하고 같은 언어로 작성되었으며 같은 알파벳을 사용하고 일부 동일한 단어가 있습니다. 이러한 해싱 알고리즘의 특징은 악의적인 파일의 변경사항을 감지하는 데 도움이 됩니다.

 

테스트 4: 2개의 Windows 시스템 파일 비교

SSDEEP는 파일이 완전히 다르며, 일치하는 부분이 0%라고 합니다.

그러나 TLSH 알고리즘에 따르면 파일은 14.5%만 차이가 납니다. 이는 대부분의 파일이 같은 컴파일러, 같은 회사에 의해 만들어졌고 아마도 같은 코드 패턴을 사용했기 때문입니다. 파일에는 유사한 VERSION_INFO 및 MZ 헤더가 있습니다.

 

테스트 5: 2개의 시스템 파일과 우리의 hashpair.exe 파일 비교

SSDEEP는 파일이 완전히 다르며, 일치하는 부분이 0%라고 말합니다.

TLSH 알고리즘은 파일들이 73.3% 이상 크게 차이난다고 말합니다. 이 파일들은 서로 다른 회사에서, 다른 라이브러리와 다른 컴파일러를 사용하여 컴파일되었습니다. 이 파일들은 서로 다른 VERSION_INFO와 다른 MZ 헤더를 가지고 있습니다. 따라서 TLSH 알고리즘은 실행 파일들을 분류할 수 있게 하여, 비슷한 악성 파일이나 동일 가족의 악성 파일을 식별하는 데 도움을 줍니다.

 

사용된 도구 목록

    1. WinMerge: https://winmerge.org

WinMerge는 Windows용 오픈 소스 차이점 및 병합 도구입니다. WinMerge는 폴더와 파일 모두를 비교할 수 있으며, 차이점을 이해하기 쉽고 다루기 편한 시각적 텍스트 형식으로 표시합니다.

    2. Notepad++: https://notepad-plus-plus.org/downloads

Notepad++은 무료("자유 연설"의 의미에서뿐만 아니라 "무료 맥주"의 의미에서도) 소스 코드 편집기이며 여러 언어를 지원하는 Notepad 대체품입니다. MS Windows 환경에서 실행되며, 그 사용은 GNU 일반 공중 사용 허가서에 의해 관리됩니다.

 

GITHUB

전체 프로젝트의 코드는 저희 github에서 확인할 수 있습니다:

https://github.com/SToFU-Systems/DSAVE

 

다음은 무엇인가요?

여러분의 지원에 감사드리며 앞으로도 우리 커뮤니티에서 지속적으로 활동해 주실 것을 기대합니다

다음 기사에서는 여러분과 함께 가장 간단한 PE 리소스 파서를 작성할 것입니다.

본 기사의 저자에게 질문이 있으시다면 다음 이메일로 보내주시기 바랍니다: articles@stofu.io

관심 가져 주셔서 감사하며 좋은 하루 되세요!