본문으로 바로가기

가. BetaBank 설치 및 실행

1. BetaBank 이란?

- 베타뱅크란 C/S App 취약점 진단 · 모의해킹을 연습할 수 있는 가상환경이다.

 

2. BetaBank 설치 및 실행 방법

- 아래의 게시글을 참고하여 'BetaBank'를 설치 및 실행한다.

[CS App 취약점 진단 · 모의해킹] - BetaFast · Bank 설치 및 실행 방법 정리

 

BetaFast · Bank 설치 및 실행 방법 정리

가. Docker Desktop 설치 및 실행1. Docker Desktop 이란?- Windows와 macOS에서 Docker 환경을 쉽게 구축하고 관리할 수 있도록 도와주는 애플리케이션이다. 2. Docker Desktop 다운로드- 아래의 사이트에 접속하여

hagsig.tistory.com

 

나. PESecurity 설치 및 실행

1. PESecurity 이란?

- 윈도우 OS 실행파일의 보안 속성을 검사하기 위해 사용되는 도구로 다음과 같은 8가지 보안 속성을 알 수 있다.

 

1) ARCH(Architecture, 아키텍처)

컴퓨터 시스템의 아키텍처 유형을 표시하며, 일반적으로 32비트 및 64비트 시스템을 구분하는 데 사용된다.

 

2) ASLR(Address Space Layout Randomization, 주소 공간 배치 난수화)

프로그램 메모리 공간의 주요 위치를 매 실행 시마다 무작위로 배치하여 특정 메모리 주소를 예측하기 어렵게 한다.

버퍼 오버플로우와 같은 메모리 공격을 방지하기 위해 사용된다.

 

3) DEP(Data Execution Prevention, 데이터 실행 방지)

실행되지 않아야 할 메모리 영역(예: 데이터가 저장되는 영역)에서 데이터가 실행되지 않도록 한다.

메모리 손상으로 인한 악성코드 실행을 방지하기 위해 사용된다.

 

4) Authenticode(인증코드)

Microsoft가 만든 코드 서명 기술로, 소프트웨어 배포 시 디지털 서명을 사용하여 소프트웨어의 출처와 무결성을 검증한다.

코드나 바이너리가 변조되는 경우를 방지하기 위해 사용되며, 변조할 경우 실행이 차단되지는 않으나 손상되어 신뢰할 수 없다는 경고가 나타난다.


5) StrongNaming(강력한 이름 지정)

.NET 어셈블리에 고유한 이름, 버전, 공개 키를 사용하여 보다 강력한 서명을 하는 것을 말한다.
동일한 이름을 가진 다른 어셈블리와의 충돌을 방지하고 어셈블리 무결성을 보장하는 데 사용된다.

Authenticode와 달리 코드나 바이너리가 변조될 경우 실행이 차단된다.

 

6) SafeSEH(Safe Structured Exception Handling, 안전한 구조적 예외 처리)

Windows 시스템에서 예외 처리를 관리하는 보안 기능으로, 허가된 예외 핸들러 목록만 실행되도록 한다.
메모리 손상이나 버퍼 오버플로우 공격을 통해 예외 핸들러를 악용하는 것을 방지하기 위해 사용된다.

 

7) Control Flow Guard(CFG, 제어 흐름 보호)

런타임에서 실행 중인 프로그램이 잘못된 메모리 주소로 분기되지 않도록 하는 코드 실행 흐름을 보호하는 기능이다.
메모리 손상을 통한 코드 실행 공격을 방지하는 데 사용된다.

 

8) HighentropyVA(High Entropy Virtual Addressing, 고밀도 가상 주소 배정)

64비트 애플리케이션에 대해 무작위 메모리 주소 공간의 범위를 늘려 보다 강하게 메모리를 보호하는 기능이다.
ASLR과 결합하여 메모리 공격을 방지하는데 사용된다.

 

2. PESecurity 다운로드 및 실행

- 아래의 사이트에 접속하여 파일을 다운로드한 뒤 압축을 해제한다.

https://github.com/NetSPI/PESecurity

 

GitHub - NetSPI/PESecurity: PowerShell module to check if a Windows binary (EXE/DLL) has been compiled with ASLR, DEP, SafeSEH,

PowerShell module to check if a Windows binary (EXE/DLL) has been compiled with ASLR, DEP, SafeSEH, StrongNaming, and Authenticode. - NetSPI/PESecurity

github.com

 

- 'powershell'에서 아래의 명령어를 입력하여 "Get-PESecurity.psm1"파일을 Import 한다.

#Import-Module [경로]
Import-Module .\Get-PESecurity.psm1

 

※ 만약 아래와 같은 오류가 발생한다면 'power shell'을 관리자 모드로 실행한 뒤 아래 두 개의 명령어를 입력한다.

import-module : 이 시스템에서 스크립트를 실행할 수 없으므로 D:\PESecurity-master\Get-PESecurity.psm1 파일을 로드할 수 없습니다. 자세한 내용은 about_Execution_Policies(https://go.microsoft.com/fwlink/?LinkID=135170)를 참조하십시오.
위치 줄:1 문자:1
+ import-module .\Get-PESecurity.psm1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : 보안 오류: (:) [Import-Module], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess,Microsoft.PowerShell.Commands.ImportModuleCommand

 

그다음 아래의 명령어를 입력한 뒤 모두 Y를 선택한다.

get-help Set-ExecutionPolicy
set-ExecutionPolicy RemoteSigned

 

다. 보안 속성 확인

1. 보안 속성 확인

- 아래의 명령어를 입력하여 "BetaBank.exe"의 보안 속성을 확인한다.

#Get-PESecurity -file [경로]
Get-PESecurity -file D:\BetaFast-master\BetaBank\BetaBank\BetaBank\bin\Debug\BetaBank.exe

 

2. 디지털 서명 여부 확인

"Authenticode"와 "StrongNaming"의 값이 "False"이므로 코드 수정 후 재 컴파일 및 실행이 가능할 것으로 판단된다.

 

라. dnSpy 설치 및 실행

1. dnSpy 이란?

- dnSpy는 .NET 애플리케이션을 디컴파일하고 디버깅할 수 있는 오픈 소스 도구로, .NET 바이너리(예: DLL, EXE)를 분석하고 수정하는 데 사용된다.

 

2. dnSpy 다운로드 및 설치

- 아래의 사이트에 접속하여 자신의 환경에 맞는 파일을 다운로드한 뒤 "dnSpy.exe" 파일을 실행한다.

https://dnspy.org/

 

Dnspy - Powerful .NET Debugger & Assembly Editor

Explore dnSpy, a powerful .NET debugger and assembly editor. Decompile, debug, and edit .NET applications easily with this versatile tool. #Dnspy

dnspy.org

 

마. 디컴파일

1. 디컴파일 실행

- "dnSpy.exe" 실행 후 'File' → 'Open' 순으로 "BetaBank.exe" 파일을 불러오거나 드래그 앤 드롭(Drag & Drop)으로 파일을 불러온다.

 

2. 주요 키워드 검색

- 검색 기능을 이용하여 "password"를 검색한 뒤 "IsAdmin" 함수를 클릭한다.

 

- "IsAdmin" 함수의 내용을 보면 로그인 시 입력한 *계정정보가 사전에 입력된 값과 같으면 Return 값이 참인 것을 알 수 있다.

*계정정보 : 계정명 "The_Chairman", 암호화된 패스워드 "IRUCBQ8EVEtKVVFsYWNlcg==" 

 

- "BetaEncryption"를 클릭하면 입력된 평문 패스워드를 암호화하는 알고리즘을 확인할 수 있다.

 

바. 재 컴파일

1. 코드(어셈블리) 수정

- 위에서 확인한 암호화 알고리즘을 복호화하는 코드를 ChatGPT에 물어본다.

 

- 위에서 확인한 복호화 코드를 삽입하기 위해 "IsAdmin()" 함수를 클릭한 뒤 우클릭 → 'Edit Method (C#)...'을 클릭한다.

 

- 아래와 같이 코드를 수정한 뒤, 'Compile' 버튼을 클릭한다.

private bool IsAdmin()
{
    string adminPassword = "IRUCBQ8EVEtKVVFsYWNlcg==";
    System.Windows.Forms.MessageBox.Show(LoginViewModel.Decrypt(this.Key, adminPassword));
    return this.Username.Equals("The_Chairman") && BetaEncryption.Encrypt(this.Key, SecureStringUtility.SecureStringToString(this.Password)).Equals(adminPassword);
}

public static string Decrypt(byte[] Key, string ciphertext)
{
    byte[] ciphertextBytes = Convert.FromBase64String(ciphertext);
    byte[] plaintextBytes = new byte[ciphertextBytes.Length];
    int startingIndex = 0;
    
    for (int i = 0; i < ciphertextBytes.Length / Key.Length; i++)
    {
    	for (int j = 0; j < Key.Length; j++)
        {
        		plaintextBytes[j + startingIndex] = (byte)(ciphertextBytes[j + startingIndex] ^ Key[j]);
        }
        startingIndex += Key.Length;
    }
    return System.Text.Encoding.ASCII.GetString(plaintextBytes).TrimEnd('\0');
}

 

- 'File' → 'Save Module' → 저장경로 수정 → 'OK' 순으로 진행하여 수정한 파일을 저장한다.

 

- 재 컴파일된 파일을 실행한 뒤 로그인을 시도하면 'The_Chairman' 계정의 *패스워드가 평문으로 변환되어 화면에 출력된다.

* The_Chairman 계정의 평문 패스워드 : Spring1980!