rules_log_yara.yar
0.01MB

 

/*
 * rules_log_yara.yar
 * PcapAnalyzer — 내장 웹 공격 탐지 룰
 *
 * 원본: Yara_InitRules() 하드코딩 룰을 외부 파일로 분리
 * 엔진: PcapAnalyzer 자체 미니 NFA Regex 엔진 (Yara_ParseFile 호환)
 *
 * [내역]
 * 1. SQLi_HighRisk: PostgreSQL(COPY TO), Oracle(DBMS_) 타겟 추가
 * 2. PathTraversal: Windows 환경 민감 파일 접근 패턴 추가
 * 3. RFI: 파라미터 기반 가중치 방식 또는 엄격한 매칭으로 오탐률(FP) 감소
 * 4. Webshell: 단독 문자열 매칭으로 인한 오탐 방지를 위해 파일명 경계(/) 추가
 * 5. Insecure_Deserialization: 역직렬화 공격 탐지
 * 6. SSTI: 서버 사이드 템플릿 인젝션 탐지
 * 7. File_Upload_Bypass: 이중 확장자 및 널바이트 파일 업로드 우회 탐지
 * 8. Auto_Scanners: 자동화 취약점 스캐너 탐지
 */

/* ================================================================
   1. SQLi — 고위험 (YARA_COND_ANY)
================================================================ */
rule SQLi_HighRisk
{
    meta:
        description   = "SQL Injection 고위험 패턴 (MySQL, MSSQL, PgSQL, Oracle)"
        attack_type   = "sqli"
        condition_type = "any"

    strings:
        /* UNION [공백/주석/URL인코딩] SELECT (ALL/DISTINCT 포함) */
        $r_union_select = /union([\s+?]|\/\*[^*]*\*\/|%09|%0[aAdD]|%20)+(all([\s+?]|\/\*[^*]*\*\/|%09|%0[aAdD]|%20)+)?(distinct([\s+?]|\/\*[^*]*\*\/|%09|%0[aAdD]|%20)+)?select/ nocase

        /* 시간 기반 블라인드 */
        $r_time_blind = /(sleep|pg_sleep|benchmark|waitfor([\s+?]|\/\*[^*]*\*\/|%20)+(delay|time))\s*\(/ nocase

        /* 저장 프로시저 실행 */
        $r_exec_proc = /(exec(ute)?\s+)?(sp_|xp_)(executesql|cmdshell|regread|dirtree)/ nocase

        /* 파일 I/O (PostgreSQL COPY TO 추가) */
        $r_file_ops = /(into\s+(outfile|dumpfile)|load_file\s*\(|load\s+data\s+infile|copy\s+[^\s]+\s+to\s+['"])/ nocase

        /* 메타데이터 조회 */
        $r_info_schema = /(information_schema|sys\.(tables|columns|user_tables)|pg_catalog|pg_tables)/ nocase

        /* 에러 기반 */
        $r_error_based = /(extractvalue|updatexml|exp\(~\(|xmltype)\s*\(/ nocase

        /* 시스템 변수 */
        $r_sysvar = /@@(version|datadir|hostname|servername|basedir)/ nocase

        /* Oracle DBMS 패키지 공격 */
        $r_oracle_dbms = /dbms_(sql|xmlquery|assert|utility)\./ nocase

    condition:
        any of them
}

/* ================================================================
   2. SQLi — 저위험 가중치 기반 (YARA_COND_WEIGHT, 임계값 2)
================================================================ */
rule SQLi_LowRisk
{
    meta:
        description      = "SQL Injection 저위험 패턴 (가중치 합산)"
        attack_type      = "sqli"
        condition_type   = "weight"
        weight_threshold = "2"

    strings:
        $r_logic_bypass = /('|")\s*(or|and)\s+['"]?1['"]?\s*=\s*['"]?1/ nocase weight:2
        $r_comment_term = /('|")\s*(;\s*--|\s*--|\s*#)/ nocase weight:1
        $r_cast_convert = /(cast|convert)\s*\(/ nocase weight:1
        $r_having_case = /\s(having|case\s+when|group\s+by|order\s+by)\s/ nocase weight:1

    condition:
        weight_threshold
}

/* ================================================================
   3. XSS — 크로스 사이트 스크립팅 (YARA_COND_ANY)
================================================================ */
rule XSS
{
    meta:
        description   = "Cross-Site Scripting 패턴"
        attack_type   = "xss"
        condition_type = "any"

    strings:
        $r_script_tag = /<\s*script[\s>\/]/ nocase
        $r_js_uri = /(javascript|vbscript)\s*:/ nocase
        $r_event_handler = /on(error|load|click|mouseover|focus|blur|input|change|abort|drag|keydown|keypress|keyup|mousedown|mouseup|submit|toggle|pointerdown|pointerup|animationstart|animationend|transitionend)\s*=/ nocase
        $r_eval_funcs = /(alert|confirm|prompt|eval|settimeout|setinterval)\s*\(/ nocase
        $r_dom_write = /(document\.(cookie|location|write\s*\()|window\.location|innerhtml|outerhtml)/ nocase
        $r_data_uri = /data:\s*(text\/html|application\/javascript)/ nocase

    condition:
        any of them
}

/* ================================================================
   4. Path Traversal / LFI (YARA_COND_ANY)
================================================================ */
rule PathTraversal
{
    meta:
        description   = "경로 이동 및 로컬 파일 인클루전(LFI) 패턴 (Unix & Win)"
        attack_type   = "trav"
        condition_type = "any"

    strings:
        /* ../ / ..\ 및 변형 */
        $r_dotdot = /(\.\.\/|\.\.\\|%2e%2e%2f|%2e%2e\/|\.\. ?%2f|%2e%2e%5c|%c0%ae%c0%ae%c0%af|%252e%252e%252f|\.\.(;|%3b)\/)/ nocase
        
        /* Unix 민감 경로 */
        $r_sensitive_unix = /(\/etc\/(passwd|shadow|group|sudoers|hosts|motd|issue)|\/proc\/(self|version|cmdline)|\/root\/\.bash_history|\/var\/log)/ nocase
        
        /* Windows 민감 경로 (추가) */
        $r_sensitive_win = /(c:\\|c:%5c|c:\/)?(windows|winnt)\/(system32|win\.ini|boot\.ini)/ nocase
        
        /* PHP 래퍼 */
        $r_php_wrapper = /php:\/\/(filter|input)|zip:\/\/|phar:\/\// nocase
        
        /* 널 바이트 인젝션 */
        $r_null_byte = /%00/ nocase

    condition:
        any of them
}

/* ================================================================
   5. RFI — 원격 파일 인클루전 (YARA_COND_ANY)
================================================================ */
rule RFI
{
    meta:
        description   = "Remote File Inclusion 패턴 (오탐 방지 적용)"
        attack_type   = "rfi"
        condition_type = "any"

    strings:
        /* 일반적인 리다이렉트가 아닌, 파일/페이지 참조 파라미터에 URL이 올 때만 탐지 */
        $r_rfi_strict = /[?&](page|file|inc|path|url|doc|view|module)= *(https?|ftp)(:\/\/|%3a%2f%2f)/ nocase

    condition:
        any of them
}

/* ================================================================
   6. Command Injection (YARA_COND_ANY)
================================================================ */
rule CmdInjection
{
    meta:
        description   = "OS 커맨드 인젝션 패턴"
        attack_type   = "cmd"
        condition_type = "any"

    strings:
        $r_shell_cmd = /(cmd(\.exe)?\s+\/[ck]|powershell(\s+-[a-z]+)?|\/bin\/(sh|bash|zsh)|\bwget\b|\bcurl\b|\bnc\s|netcat|ncat|\bmkfifo\b)/ nocase
        $r_cmd_sep = /[;|`&]\s*(id|whoami|ls|cat|echo|ping|wget|curl|chmod|chown|uname|hostname)\b/ nocase
        $r_reverse_shell = /(\/dev\/(tcp|udp)\/[0-9]+\.[0-9]|python[23]?\s+-c|perl\s+-(e|mio)|php\s+-r|ruby\s+-rsocket)/ nocase
        $r_ifs_bypass = /\$\{?IFS\}?/ nocase

    condition:
        any of them
}

/* ================================================================
   7. Webshell (YARA_COND_ANY)
================================================================ */
rule Webshell
{
    meta:
        description   = "웹셸"
        attack_type   = "webshell"
        condition_type = "any"

    strings:
        /* 슬래시(/)를 포함하여 c99 같은 일반 문자열이 오탐되지 않도록 수정 */
        $r_known_shells = /\/(c99|wso|r57|b374k|china\.chopper|godzilla|behinder|regeorg|cobaltstrike|aspxspy|phpspy)\.(php|asp|aspx|jsp)/ nocase
        $r_dangerous_funcs = /(system|passthru|shell_exec|popen|proc_open|pcntl_exec|assert|create_function|preg_replace)\s*\(/ nocase
        $r_encoded_payload = /(base64_decode|gzinflate|gzdecode)\s*\(/ nocase
        $r_shell_param = /[?&](cmd|exec|run|shell|code)=/ nocase

    condition:
        any of them
}

/* ================================================================
   8. SSRF — 서버 사이드 요청 위조 (YARA_COND_ANY)
================================================================ */
rule SSRF
{
    meta:
        description   = "Server-Side Request Forgery 패턴"
        attack_type   = "ssrf"
        condition_type = "any"

    strings:
        $r_metadata = /(169\.254\.169\.254|metadata\.(google|azure)|0177\.|0x7f|2130706433|\[::1\]|\[::\]|localhost)/ nocase
        $r_internal_net = /\/\/\s*(127\.|10\.|192\.168\.|172\.(1[6-9]|2[0-9]|3[01])\.)/ nocase
        $r_proto_smuggle = /(dict|gopher|sftp|ldaps?|file):\/\// nocase

    condition:
        any of them
}

/* ================================================================
   9. XXE — XML 외부 엔티티 인젝션 (YARA_COND_ANY)
================================================================ */
rule XXE
{
    meta:
        description   = "XML External Entity Injection 패턴"
        attack_type   = "xxe"
        condition_type = "any"

    strings:
        $r_entity = /<!(\s*)(entity|doctype)/ nocase
        $r_system_uri = /system\s+['"]\s*(file|http|https):\/\// nocase

    condition:
        any of them
}

/* ================================================================
   10. Log4Shell & Spring/Struts (YARA_COND_ANY)
================================================================ */
rule Framework_Exploits
{
    meta:
        description   = "Log4Shell, Spring4Shell, Struts2 패턴 모음"
        attack_type   = "log4shell"
        condition_type = "any"

    strings:
        /* Log4Shell */
        $r_jndi_basic = /\$\{[^}]*jndi\s*:/ nocase
        $r_jndi_proto = /\$\{jndi:(ldap|rmi|dns|ldaps|corba|iiop)s?:\/\// nocase
        $r_jndi_obfuscated = /\$\{[^}]*(lower|upper|:-)[^}]*:[^}]*\}/ nocase
        
        /* Spring & Struts2 */
        $r_classloader = /class\.(module\.classloader|classloader\.(resources|defaultassertionsstatus|uricharset|parent))/ nocase
        $r_ognl = /(ognl:|#(application|session|request|parameters|attr|this|root)\[|@java\.lang\.(runtime|processbuilder)@)/ nocase
        $r_struts2_bypass = /%\{(#nike=|#_=|#_memberaccess|#application|#container=@ognl)/ nocase
        $r_spring_cloud = /spring\.cloud\.(bootstrap|function\.routing-expression)/ nocase
        $r_proto_pollution = /(__proto__|constructor\.prototype|prototype\.constructor|__define[gs]etter__)/ nocase

    condition:
        any of them
}

/* ================================================================
   11. [신규] Insecure Deserialization (YARA_COND_ANY)
================================================================ */
rule Insecure_Deserialization
{
    meta:
        description   = "안전하지 않은 역직렬화 공격 (Java, PHP, .NET)"
        attack_type   = "deserial"
        condition_type = "any"

    strings:
        /* Java Base64 (rO0AB) 및 Hex (aced0005) 매직 바이트 */
        $r_java_magic = /(rO0ABX|aced0005)/ nocase
        
        /* PHP 직렬화 객체 형식 (예: O:8:"MyClass":) */
        $r_php_obj = /O:\d+:"[A-Za-z0-9_]+":/ nocase
        
        /* .NET Base64 인코딩된 포맷터 헤더 */
        $r_dotnet_fmt = /AAEAAAD\/\/\/\/\// nocase

    condition:
        any of them
}

/* ================================================================
   12. [신규] SSTI — 서버 사이드 템플릿 인젝션 (YARA_COND_ANY)
================================================================ */
rule SSTI
{
    meta:
        description   = "Server-Side Template Injection 패턴"
        attack_type   = "ssti"
        condition_type = "any"

    strings:
        /* Java 계열 (Spring/Thymeleaf/FreeMarker) RCE 시도 */
        $r_ssti_java = /\$\{(T\(java\.lang\.Runtime\)|T\(java\.lang\.ProcessBuilder\))/ nocase
        
        /* Python/Jinja2/Twig 계열 민감 객체 접근 */
        $r_ssti_python = /\{\{\s*(request|self|config|url_for)\s*\./ nocase
        
        /* 일반적인 템플릿 명령어 실행 블록 */
        $r_ssti_generic = /(\{\%|\[\%|#set\s*\().*(exec|system|eval)/ nocase

    condition:
        any of them
}

/* ================================================================
   13. [신규] Malicious File Upload Bypass (YARA_COND_ANY)
================================================================ */
rule File_Upload_Bypass
{
    meta:
        description   = "악성 파일 업로드 우회 기법 (이중 확장자, 널바이트)"
        attack_type   = "upload"
        condition_type = "any"

    strings:
        /* 이중 확장자 (예: shell.php.jpg) */
        $r_double_ext = /\.(php[345]?|asp[x]?|jsp[x]?|cgi|sh|pl)\.(jpg|png|gif|txt|pdf|zip)/ nocase
        
        /* 널바이트 인젝션 (예: shell.php%00.jpg) */
        $r_null_ext = /\.(php[345]?|asp[x]?|jsp[x]?|cgi|sh|pl)%00\.(jpg|png|gif|txt|pdf)/ nocase

    condition:
        any of them
}

/* ================================================================
   14. [신규] Automated Scanners & Attack Tools (YARA_COND_ANY)
================================================================ */
rule Auto_Scanners
{
    meta:
        description   = "자동화 취약점 스캐너 및 공격 도구 헤더/User-Agent"
        attack_type   = "scanner"
        condition_type = "any"

    strings:
        /* 주요 스캐너 및 공격 프록시 시그니처 */
        $r_scanners = /(sqlmap|nikto|dirbuster|nmap|zgrab|masscan|w3af|acunetix|netsparker|appscan|arachni|burpcollaborator)/ nocase
        
        /* Python/Go 등 스크립트 기반 기본 헤더 통신 시도 */
        $r_script_ua = /(python-requests|python-urllib|go-http-client|java\/[0-9\.]+)/ nocase

    condition:
        any of them
}
반응형

rules_log_snort.rules
0.00MB

alert any any any any (msg:"getuser"; content:"/getuser"; sid:1000001; )
alert any any any any (msg:"s.txt"; content:"s.txt"; pcre:"/(ts.txt|ds.txt)/"; sid:1000002; )
alert any any any any (msg:"SQLi"; content:"UNION"; content:"SELECT"; pcre:"/(UNION SELECT|UNION+SELECT|UNION/**/SELECT)/"; sid:1000001; )
alert any any any any (msg:"test" content:"/**/"; content:"CONCAT",distance 0; content:"SELECT"; sid:1000003; )

 

반응형

 

rules_eml_yara.yar
0.02MB

 

/*
 * EML Macro & Phishing & Exploit Combined Signatures - FULL PER-RISK VERSION
 * Source: g_emlMacroSigs 배열 100% 반영 (197개 패턴 모두, 중복 제거, risk 값 그대로 사용)
 * Author: lastcard
 * 설명: 카테고리별로 나누고, **카테고리 안에서 risk 점수별로 완전 분리**한 룰
 *       각 룰의 meta에 정확한 risk = X (C 배열의 5번째 필드 그대로)
 *       패턴 1개도 빠지지 않음 → 실무에서 risk별 점수 합산/필터링에 최적
 *       EML 파일은 크기가 작아 40+ 룰도 성능 문제 전혀 없음
 */

/* ================================================================
   1. VBA Macro & Office Document Structure
================================================================ */

rule EML_VBA_Structure_Risk3
{
    meta:
        description = "VBA Macro & Office Structure - Risk 3"
        author      = "lastcard"
        risk        = 3
        category    = "vba_structure"
    strings:
        $s = "Attribut" nocase
    condition:
        any of them
}

rule EML_VBA_Structure_Risk4
{
    meta:
        description = "VBA Macro & Office Structure - Risk 4"
        author      = "lastcard"
        risk        = 4
        category    = "vba_structure"
    strings:
        $s1 = "VBA6.DLL" nocase
        $s2 = "VBA7.DLL" nocase
        $s3 = "xlsm" nocase
        $s4 = "xlam" nocase
        $s5 = "dotm" nocase
        $s6 = "docm" nocase
        $s7 = "pptm" nocase
    condition:
        any of them
}

rule EML_VBA_Structure_Risk5
{
    meta:
        description = "VBA Macro & Office Structure - Risk 5"
        author      = "lastcard"
        risk        = 5
        category    = "vba_structure"
    strings:
        $s1 = "macroEnabled" nocase
        $s2 = "<x:MacroRef" nocase
    condition:
        any of them
}

rule EML_VBA_Structure_Risk6
{
    meta:
        description = "VBA Macro & Office Structure - Risk 6"
        author      = "lastcard"
        risk        = 6
        category    = "vba_structure"
    strings:
        $s1 = "_VBA_PROJECT" nocase
        $s2 = "VBAProject" nocase
        $s3 = "vbaProject.bin" nocase
    condition:
        any of them
}

rule EML_VBA_Structure_Risk7
{
    meta:
        description = "VBA Macro & Office Structure - Risk 7"
        author      = "lastcard"
        risk        = 7
        category    = "vba_structure"
    strings:
        $s = { D0 CF 11 E0 A1 B1 1A E1 }
    condition:
        any of them
}

/* ================================================================
   2. Auto-Execution Triggers
================================================================ */

rule EML_AutoExec_Risk4
{
    meta:
        description = "Auto-Execution Triggers - Risk 4"
        author      = "lastcard"
        risk        = 4
        category    = "auto_execution"
    strings:
        $s1 = "Worksheet_Activate" nocase
        $s2 = "UserForm_Initialize" nocase
    condition:
        any of them
}

rule EML_AutoExec_Risk5
{
    meta:
        description = "Auto-Execution Triggers - Risk 5"
        author      = "lastcard"
        risk        = 5
        category    = "auto_execution"
    strings:
        $s1 = "AutoClose" nocase
        $s2 = "AutoExit" nocase
        $s3 = "Workbook_Close" nocase
        $s4 = "Document_Close" nocase
        $s5 = "Auto_Open" nocase
        $s6 = "Auto_Close" nocase
    condition:
        any of them
}

rule EML_AutoExec_Risk6
{
    meta:
        description = "Auto-Execution Triggers - Risk 6"
        author      = "lastcard"
        risk        = 6
        category    = "auto_execution"
    strings:
        $s1 = "AutoOpen" nocase
        $s2 = "AutoExec" nocase
        $s3 = "Workbook_Open" nocase
        $s4 = "Document_Open" nocase
    condition:
        any of them
}

/* ================================================================
   3. Scripting & LOLBins Execution
================================================================ */

rule EML_Scripting_Risk3
{
    meta:
        description = "Scripting & LOLBins - Risk 3"
        author      = "lastcard"
        risk        = 3
        category    = "scripting_lolbin"
    strings:
        $s = "ToBase64String" nocase
    condition:
        any of them
}

rule EML_Scripting_Risk4
{
    meta:
        description = "Scripting & LOLBins - Risk 4"
        author      = "lastcard"
        risk        = 4
        category    = "scripting_lolbin"
    strings:
        $s1 = "HKEY_CURRENT_USER" nocase
        $s2 = "HKCU" nocase
        $s3 = "HKEY_LOCAL_MACHINE" nocase
        $s4 = "HKLM" nocase
        $s5 = "RegRead" nocase
        $s6 = "Asc(" nocase
        $s7 = "Replace(" nocase
    condition:
        any of them
}

rule EML_Scripting_Risk5
{
    meta:
        description = "Scripting & LOLBins - Risk 5"
        author      = "lastcard"
        risk        = 5
        category    = "scripting_lolbin"
    strings:
        $s1 = "Chr(" nocase
        $s2 = "ChrW(" nocase
        $s3 = "StrReverse(" nocase
    condition:
        any of them
}

rule EML_Scripting_Risk6
{
    meta:
        description = "Scripting & LOLBins - Risk 6"
        author      = "lastcard"
        risk        = 6
        category    = "scripting_lolbin"
    strings:
        $s1 = "GetObject(" nocase
        $s2 = "Environ(" nocase
        $s3 = "Scripting.FileSystem" nocase
        $s4 = "Excel.Application" nocase
        $s5 = "Word.Application" nocase
        $s6 = "-nop " nocase
        $s7 = "cmd /k" nocase
        $s8 = "cscript" nocase
        $s9 = "wscript" nocase
        $s10 = "CallByName" nocase
        $s11 = "/JS " nocase
        $s12 = "/Launch" nocase
        $s13 = "/EmbeddedFile" nocase
    condition:
        any of them
}

rule EML_Scripting_Risk7
{
    meta:
        description = "Scripting & LOLBins - Risk 7"
        author      = "lastcard"
        risk        = 7
        category    = "scripting_lolbin"
    strings:
        $s1 = "CreateObject(" nocase
        $s2 = "WScript.Shell" nocase
        $s3 = "WScript.CreateObject" nocase
        $s4 = "ADODB.Stream" nocase
        $s5 = "Microsoft.XMLHTTP" nocase
        $s6 = "WinHttp.WinHttpRequest" nocase
        $s7 = "-w hidden" nocase
        $s8 = "Net.WebClient" nocase
        $s9 = "FromBase64String" nocase
        $s10 = "cmd.exe" nocase
        $s11 = "cmd /c" nocase
        $s12 = "/JavaScript" nocase
        $s13 = "/OpenAction" nocase
        $s14 = "\x4C\x00\x00\x00\x01\x14\x02\x00"  // LNK
    condition:
        any of them
}

rule EML_Scripting_Risk8
{
    meta:
        description = "Scripting & LOLBins - Risk 8"
        author      = "lastcard"
        risk        = 8
        category    = "scripting_lolbin"
    strings:
        $s1 = "Shell(" nocase
        $s2 = "powershell" nocase
        $s3 = "-enc " nocase
        $s4 = "DownloadString" nocase
        $s5 = "DownloadFile" nocase
        $s6 = "Start-Process" nocase
        $s7 = "Invoke-Command" nocase
        $s8 = "Bypass" nocase
        $s9 = "mshta" nocase
        $s10 = "regsvr32" nocase
        $s11 = "rundll32" nocase
        $s12 = "certutil" nocase
        $s13 = "bitsadmin" nocase
        $s14 = "<HTA:APPLICATION" nocase
        $s15 = "hta:application" nocase
    condition:
        any of them
}

rule EML_Scripting_Risk9
{
    meta:
        description = "Scripting & LOLBins - Risk 9"
        author      = "lastcard"
        risk        = 9
        category    = "scripting_lolbin"
    strings:
        $s1 = "-EncodedCommand" nocase
        $s2 = "IEX(" nocase
        $s3 = "Invoke-Expression" nocase
    condition:
        any of them
}

/* ================================================================
   4. Phishing & BEC Lures
================================================================ */

rule EML_Phishing_Risk4
{
    meta:
        description = "Phishing & BEC - Risk 4"
        author      = "lastcard"
        risk        = 4
        category    = "phishing_bec"
    strings:
        $s1 = "wire transfer" nocase
        $s2 = "Wire Transfer" nocase
        $s3 = "bank details" nocase
        $s4 = "Bank Details" nocase
        $s5 = "bank account" nocase
        $s6 = "verify your" nocase
        $s7 = "confirm your" nocase
        $s8 = "click here" nocase
        $s9 = "Click Here" nocase
        $s10 = "gift cards appreciation" nocase
    condition:
        any of them
}

rule EML_Phishing_Risk5
{
    meta:
        description = "Phishing & BEC - Risk 5"
        author      = "lastcard"
        risk        = 5
        category    = "phishing_bec"
    strings:
        $s1 = "urgent payment" nocase
        $s2 = "Urgent Payment" nocase
        $s3 = "password" nocase
        $s4 = "verify your account" nocase
        $s5 = "suspended" nocase
        $s6 = "will be suspended" nocase
        $s7 = "account will be" nocase
        $s8 = "secure your account" nocase
        $s9 = "unusual sign-in" nocase
        $s10 = "unusual signin" nocase
        $s11 = "unrecognized device" nocase
        $s12 = "urgent wire transfer" nocase
        $s13 = "CEO approval required" nocase
        $s14 = "update banking details" nocase
        $s15 = "invoice correction" nocase
        $s16 = "qrcode" nocase
    condition:
        any of them
}

rule EML_Phishing_Risk6
{
    meta:
        description = "Phishing & BEC - Risk 6"
        author      = "lastcard"
        risk        = 6
        category    = "phishing_bec"
    strings:
        $s1 = "microsoft-security" nocase
        $s2 = "apple-security" nocase
        $s3 = "paypal-security" nocase
    condition:
        any of them
}

/* ================================================================
   5. HTML Smuggling & JS Obfuscation
================================================================ */

rule EML_HTML_Smuggling_Risk5
{
    meta:
        description = "HTML Smuggling & JS - Risk 5"
        author      = "lastcard"
        risk        = 5
        category    = "html_smuggling"
    strings:
        $s1 = "window.URL" nocase
        $s2 = "new Blob(" nocase
        $s3 = "a.href" nocase
        $s4 = "atob(" nocase
        $s5 = "fromCharCode" nocase
        $s6 = "String.fromCharCode" nocase
        $s7 = "document.onload" nocase
        $s8 = "window.onload" nocase
        $s9 = "visibilitychange" nocase
        $s10 = "addEventListener" nocase
        $s11 = "charCodeAt" nocase
        $s12 = "concat(" nocase
    condition:
        any of them
}

rule EML_HTML_Smuggling_Risk6
{
    meta:
        description = "HTML Smuggling & JS - Risk 6"
        author      = "lastcard"
        risk        = 6
        category    = "html_smuggling"
    strings:
        $s1 = "createObjectURL" nocase
        $s2 = "URL.createObjectURL" nocase
        $s3 = "a.download" nocase
        $s4 = ".click()" nocase
        $s5 = "data:text/html" nocase
        $s6 = "data:application" nocase
        $s7 = "setTimeout" nocase
        $s8 = "setInterval" nocase
        $s9 = "\"<scr\"" nocase
        $s10 = "'<scr'" nocase
        $s11 = "application/x-msdownload" nocase
        $s12 = "@evil" nocase
        $s13 = ".com@" nocase
        $s14 = ".net@" nocase
        $s15 = ".org@" nocase
    condition:
        any of them
}

rule EML_HTML_Smuggling_Risk7
{
    meta:
        description = "HTML Smuggling & JS - Risk 7"
        author      = "lastcard"
        risk        = 7
        category    = "html_smuggling"
    strings:
        $s1 = "unescape(" nocase
        $s2 = "octet-stream" nocase
        $s3 = "data:application/octet-stream" nocase
        $s4 = "data:text/html;base64," nocase
    condition:
        any of them
}

rule EML_HTML_Smuggling_Risk9
{
    meta:
        description = "HTML Smuggling & JS - Risk 9"
        author      = "lastcard"
        risk        = 9
        category    = "html_smuggling"
    strings:
        $s = "eval(" nocase
    condition:
        any of them
}

/* ================================================================
   6. RTF & OLE Exploits
================================================================ */

rule EML_RTF_OLE_Risk2
{
    meta:
        description = "RTF & OLE Exploits - Risk 2"
        author      = "lastcard"
        risk        = 2
        category    = "rtf_ole"
    strings:
        $s1 = "{\\rtf1" ascii
        $s2 = "application/rtf" nocase
    condition:
        any of them
}

rule EML_RTF_OLE_Risk6
{
    meta:
        description = "RTF & OLE Exploits - Risk 6"
        author      = "lastcard"
        risk        = 6
        category    = "rtf_ole"
    strings:
        $s = "\\objclass" ascii
    condition:
        any of them
}

rule EML_RTF_OLE_Risk7
{
    meta:
        description = "RTF & OLE Exploits - Risk 7"
        author      = "lastcard"
        risk        = 7
        category    = "rtf_ole"
    strings:
        $s1 = "\\object" ascii
        $s2 = "\\objupdate" ascii
        $s3 = "\\*\\objclass" ascii
        $s4 = { D0 CF 11 E0 A1 B1 1A E1 }  // RTF 내부 OLE
    condition:
        any of them
}

rule EML_RTF_OLE_Risk8
{
    meta:
        description = "RTF & OLE Exploits - Risk 8"
        author      = "lastcard"
        risk        = 8
        category    = "rtf_ole"
    strings:
        $s = "\\oleobject" ascii
    condition:
        any of them
}

rule EML_RTF_OLE_Risk9
{
    meta:
        description = "RTF & OLE Exploits - Risk 9"
        author      = "lastcard"
        risk        = 9
        category    = "rtf_ole"
    strings:
        $s1 = "\\objdata" ascii
        $s2 = "ms-msdt:" nocase
        $s3 = "EQNEDT32.EXE" nocase
        $s4 = "D0 CF 11 E0 A1 B1 1A E1"  // 중복 hex (RTF용)
    condition:
        any of them
}

rule EML_RTF_OLE_Risk10
{
    meta:
        description = "RTF & OLE Exploits - Risk 10"
        author      = "lastcard"
        risk        = 10
        category    = "rtf_ole"
    strings:
        $s = "\\objautlink" ascii
    condition:
        any of them
}

/* ================================================================
   7. Suspicious Attachments & URL Abuse + MIME + Headers + Signed Malware
================================================================ */

rule EML_Suspicious_Risk2
{
    meta:
        description = "Suspicious Indicators - Risk 2"
        author      = "lastcard"
        risk        = 2
        category    = "suspicious"
    strings:
        $s1 = "application/pdf" nocase
        $s2 = "From: \"" nocase
        $s3 = "Subject: =?" nocase
        $s4 = "=?UTF-8?" nocase
        $s5 = "=?utf-8?" nocase
    condition:
        any of them
}

rule EML_Suspicious_Risk3
{
    meta:
        description = "Suspicious Indicators - Risk 3"
        author      = "lastcard"
        risk        = 3
        category    = "suspicious"
    strings:
        $s1 = "ftp://" nocase
        $s2 = "application/zip" nocase
        $s3 = "application/x-zip" nocase
        $s4 = "application/vnd.ms-excel" nocase
        $s5 = "application/msword" nocase
        $s6 = "&#" nocase
        $s7 = "Reply-To:" nocase
        $s8 = "reply-to:" nocase
    condition:
        any of them
}

rule EML_Suspicious_Risk4
{
    meta:
        description = "Suspicious Indicators - Risk 4"
        author      = "lastcard"
        risk        = 4
        category    = "suspicious"
    strings:
        $s1 = "http://" nocase
        $s2 = "https://" nocase
        $s3 = "&#x" nocase
    condition:
        any of them
}

rule EML_Suspicious_Risk5
{
    meta:
        description = "Suspicious Indicators - Risk 5"
        author      = "lastcard"
        risk        = 5
        category    = "suspicious"
    strings:
        $s1 = ".exe" nocase
        $s2 = ".bat" nocase
        $s3 = ".js\"" nocase
        $s4 = "xn--" nocase
        $s5 = "socket" nocase
        $s6 = "octet-stream" nocase  // 일부 중복은 HTML에 이미 있음
        $s7 = "Invoice.exe" nocase
        $s8 = ".vbs" nocase
        $s9 = "login." nocase
        $s10 = "secure." nocase
        $s11 = "verify." nocase
        $s12 = "account." nocase
        $s13 = "update." nocase
        $s14 = "=0D=0A" nocase
    condition:
        any of them
}

rule EML_Suspicious_Risk6
{
    meta:
        description = "Suspicious Indicators - Risk 6"
        author      = "lastcard"
        risk        = 6
        category    = "suspicious"
    strings:
        $s1 = ".ps1" nocase
        $s2 = "=00" nocase
        $s3 = "data:image/png;base64,iVBORw0KGgo" nocase
    condition:
        any of them
}

rule EML_Suspicious_Risk7
{
    meta:
        description = "Suspicious Indicators - Risk 7"
        author      = "lastcard"
        risk        = 7
        category    = "suspicious"
    strings:
        $s1 = "TrustConnect Software PTY LTD" nocase
        $s2 = "msteams.exe" nocase
        $s3 = "adobereader.exe" nocase
    condition:
        any of them
}

/* ================================================================
   8. High-Risk Combination (Risk 8 이상 조합)
================================================================ */
rule EML_HighRisk_Combination
{
    meta:
        description = "High Risk Combination (Risk 8+ 패턴 + 구조/자동실행)"
        author      = "lastcard"
        risk        = 10
        severity    = "critical"
    condition:
        (EML_VBA_Structure_Risk6 or EML_VBA_Structure_Risk7 or EML_AutoExec_Risk5 or EML_AutoExec_Risk6) and
        (EML_Scripting_Risk8 or EML_Scripting_Risk9 or EML_HTML_Smuggling_Risk7 or EML_HTML_Smuggling_Risk9 or EML_RTF_OLE_Risk8 or EML_RTF_OLE_Risk9 or EML_RTF_OLE_Risk10)
}
반응형

[C언어] Data Conversion Tool - RawVera : rules_eml_yara.yar
[C언어] Data Conversion Tool - RawVera : rules_log_snort.rules
[C언어] Data Conversion Tool - RawVera : rules_log_yara.yar

 

RawVera v0.8.exe
0.59MB

 

https://www.virustotal.com/gui/file/a4206e248a6251014cb6e4f9d8d7c4941ed8587b4b58f19a47f61ff88c06fb73

 

VirusTotal

 

www.virustotal.com

 

0123456

 

 

 

반응형

◎ 개요

 - 2025년 10월 7일에 공식 출시된 Python 3.14는 파이썬 역사상 가장 중요한 릴리스 중 하나로 평가받고 있습니다.

 - 이번 버전은 성능, 보안, 그리고 개발자 경험을 크게 향상시키는 혁신적인 기능들을 도입했습니다.

◎ 핵심 새로운 기능들
 - Template String Literals (T-Strings)
  > Python 3.14의 가장 주목할 만한 새 기능 중 하나는 템플릿 문자열 리터럴입니다.

  > T-strings는 기존 f-string 문법을 사용하지만 즉시 문자열로 변환되지 않고 Template 객체를 반환합니다.

variety = 'Stilton'
template = t'Try some {variety} cheese!'

  > 이 기능의 핵심 장점은 보안성입니다.

  > T-strings는 SQL 인젝션이나 XSS 공격과 같은 보안 취약점을 방지할 수 있는 안전한 문자열 처리를 제공합니다.

  > 또한 HTML, SQL, 구조화된 로깅 등 다양한 도메인에서 맞춤형 문자열 처리가 가능합니다.

 - 지연된 어노테이션 평가 (Deferred Annotation Evaluation)
  > PEP 649를 통해 Python 3.14는 함수, 클래스, 모듈의 어노테이션을 즉시 평가하지 않고 필요할 때만 평가하도록 변경했습니다.

  > 이는 성능 향상과 순환 참조 문제 해결에 도움이 됩니다.

# Python 3.14에서는 이것이 가능합니다
def process_user(user: User) -> dict:
    return {"name": user.name}

class User:
    name: str

  > User 클래스가 아직 정의되지 않았더라도 함수 정의 시점에서는 오류가 발생하지 않습니다.

 - Free-Threading (GIL 제거)
  > Python 3.14는 Free-threaded Python을 공식적으로 지원합니다.

  > 이는 Global Interpreter Lock(GIL)을 비활성화하여 진정한 멀티스레드 병렬성을 가능하게 합니다.

  > 이전 Python 3.13에서 실험적이었던 이 기능이 이제 공식 지원되며, 단일 스레드 코드의 성능 페널티가 40%에서 5-10%로 크게 감소했습니다.

 - 서브인터프리터 (Subinterpreters)
  > PEP 734를 통해 Python 3.14는 표준 라이브러리에서 여러 인터프리터를 동시에 사용할 수 있는 기능을 추가했습니다.

  > 새로운 concurrent.interpreters 모듈을 통해 동일한 프로세스 내에서 독립적인 Python 인터프리터를 관리할 수 있습니다.

from concurrent.futures import InterpreterPoolExecutor

def sums(num):
    return sum(i * i for i in range(num + 1))

with InterpreterPoolExecutor() as executor:
    print(list(executor.map(sums, [100_000] * 4)))

  > 각 인터프리터는 자체 GIL을 가지므로 필요에 따라 별도의 CPU를 사용할 수 있어 멀티스레딩과 멀티프로세싱의 장점을 모두 제공합니다.

◎ 사용자 인터페이스 개선사항
 - REPL 개선

  > Python 3.14의 REPL(대화형 셸)은 여러 중요한 개선사항을 포함합니다.

  • 실시간 구문 강조: 코드를 입력할 때 키워드, 문자열, 주석, 숫자 등이 각각 다른 색상으로 표시됩니다
  • 자동 완성: import 문에서 모듈 이름을 자동 완성할 수 있습니다
  • 디버거 구문 강조: Python 디버거(pdb)에서도 소스 코드가 색상으로 표시됩니다

 

 - 색상 지원 확장

  > Python 3.14는 여러 명령줄 도구에서 색상 출력을 지원합니다.

  • unittest: 실패한 테스트는 빨간색, 통과한 테스트는 녹색으로 표시됩니다
  • argparse: 도움말 텍스트가 색상으로 표시됩니다
  • json 모듈: JSON 출력이 기본적으로 색상으로 표시됩니다

 

 - 개선된 오류 메시지

  > Python 3.14는 더 친근한 오류 메시지를 제공합니다.

  > 예를 들어, argparse는 이제 오타에 대한 수정 제안을 제공합니다.

◎ 표준 라이브러리 개선사항
 - pathlib 새로운 메서드들

  > pathlib.Path 객체에 네 가지 새로운 메서드가 추가되었습니다.

  • copy(): 파일을 대상 위치로 복사
  • copy_into(): 파일을 특정 디렉토리로 복사
  • move(): 파일을 대상 위치로 이동
  • move_into(): 파일을 특정 디렉토리로 이동

  > 이제 shutil 모듈을 사용하지 않고도 Path 객체에서 직접 파일 복사와 이동이 가능합니다.

 

 - datetime 개선

  > Python 3.14에서는 날짜와 시간 문자열을 직접 datetime.date나 datetime.time 객체로 파싱할 수 있습니다:

from datetime import date, time

# 이제 직접 파싱 가능
my_date = date.strptime("2026-03-14", "%Y-%m-%d")
my_time = time.strptime("15:30:00", "%H:%M:%S")


 - UUID 개선
  > uuid 모듈이 이제 UUID 버전 6-8을 지원하며, 특히 생성 시간으로 정렬 가능한 UUID7을 지원합니다.

  > 또한 기존 버전(3-5)의 생성 속도가 최대 40% 향상되었습니다.

 - Zstandard 압축 지원
  > PEP 784를 통해 새로운 compression.zstd 모듈이 추가되어 Zstandard 압축 알고리즘을 기본 지원합니다.

  > Zstandard는 Facebook이 개발한 압축 알고리즘으로 기존 gzip이나 bz2보다 빠르고 높은 압축률을 제공합니다.

◎ 성능 개선사항
 - 실험적 JIT 컴파일러
  > Python 3.14는 macOS와 Windows 공식 바이너리에 실험적 JIT(Just-In-Time) 컴파일러를 포함합니다.

  > 환경 변수 PYTHON_JIT=1로 활성화할 수 있으며, 특정 컴파일러에서 3-5%의 성능 향상을 제공합니다.

 - 새로운 인터프리터 타입
  > Python 3.14는 특정 최신 컴파일러에서 상당한 성능 향상을 제공하는 새로운 타입의 인터프리터를 추가했습니다.

  > 이는 꼬리 호출 기반 구현을 사용하여 성능을 개선합니다.

◎ 문법 개선사항
 - 예외 처리 간소화
  > PEP 758을 통해 여러 예외 타입을 포착할 때 괄호를 생략할 수 있게 되었습니다:

# Python 3.14에서 가능
try:
    int(value)
except ValueError, TypeError:
    print("Invalid number")


 - 안전성 향상
  > PEP 765를 통해 finally 블록을 종료하는 return/break/continue 문이 금지되었습니다.

  > 이는 코드의 안전성을 향상시킵니다.

◎ 디버깅 및 개발 도구 개선
 - 향상된 디버깅 인터페이스
  > Python 3.14는 실행 중인 Python 프로세스에 안전하게 연결할 수 있는 제로 오버헤드 디버깅 인터페이스를 제공합니다.

  > 새로운 명령줄 인터페이스를 통해 비동기 작업을 검사할 수 있습니다:

python -m asyncio ps PID
python -m asyncio pstree PID

  > pdb 모듈도 이제 -p PID 옵션을 통해 실행 중인 Python 프로세스에 원격으로 연결할 수 있습니다.

◎ 미래 전망
 - Python 3.14는 파이썬의 진화에서 중요한 이정표입니다. Free-threading의 공식 지원, 서브인터프리터의 표준화, 그리고 T-strings와 같은 새로운 언어 기능들은 Python이 현대적인 애플리케이션 개발의 요구사항을 충족하기 위해 지속적으로 발전하고 있음을 보여줍니다.
 - 이러한 개선사항들은 개발자들에게 더 나은 성능, 향상된 보안성, 그리고 개선된 개발 경험을 제공하며, Python의 미래를 더욱 밝게 만들고 있습니다.

반응형

1. 가상환경 사용 이유

 - Python 가상환경은 각 프로젝트마다 독립된 Python 환경을 제공하는 핵심적인 개발 도구입니다.

 

  > 의존성 격리(Dependency Isolation)

  • 가상환경의 주요 목적은 프로젝트 간 패키지 충돌을 방지하는 것입니다.
  • 예를 들어, 프로젝트 A에서는 Django 2.0이 필요하고 프로젝트 B에서는 Django 3.0이 필요한 경우, 전역 Python 환경에서는 버전 충돌이 발생합니다.

 

  > 재현 가능한 개발 환경

  • 가상환경을 사용하면 동일한 버전의 패키지들을 정확히 지정하여 다른 개발자나 시스템에서도 동일한 환경을 재현할 수 있습니다.

 

  > 프로젝트 이식성

  • 각 프로젝트가 자체 환경을 가지므로, 프로젝트를 다른 시스템으로 이동하거나 공유할 때 의존성 문제 없이 작업할 수 있습니다.

 

  > 시스템 Python 보호

  • 전역 Python 환경을 건드리지 않으므로 시스템 Python 설치가 손상될 위험이 없습니다.

 

2. Python2와 Python3 가상환경 비교

 - Python3 - venv 모듈 (권장)

  > Python 3.3부터 표준 라이브러리에 포함된 venv 모듈은 별도 설치 없이 사용 가능합니다.

  > 특징

  • Python 3.3+ 표준 라이브러리 포함
  • 별도 설치 불필요
  • 가볍고 빠른 실행
  • Python2 지원 안함

 

 - Python2 - virtualenv 패키지 (필수)

  > Python2에서는 virtualenv 서드파티 패키지를 반드시 설치해야 합니다.

  > 특징

  • Python2와 Python3 모두 지원
  • 별도 설치 필요 (pip install virtualenv)
  • venv보다 더 많은 기능 제공
  • 더 많은 커스터마이징 옵션

 

3. Python2 가상환경 설정

 - Python2 pip 설치

  > 먼저 Python2용 pip를 설치해야 합니다:

get-pip.py 스크립트 다운로드
# wget https://bootstrap.pypa.io/pip/2.7/get-pip.py

Python2용 pip 설치
# python2 get-pip.py

설치 확인
# which pip2
# pip2 --version


 - virtualenv 설치

Python2용 virtualenv 설치
# pip2 install virtualenv

또는 사용자 로컬 설치
# pip2 install --user virtualenv


 - Python2 가상환경 생성 및 사용

가상환경 생성용 패키지 설치
# apt install python버전-venv

가상환경 생성
# virtualenv venv-python2

Python 버전 지정하여 생성
# virtualenv --python=python2.7 venv-python2

가상환경 활성화
# source venv-python2/bin/activate

활성화 확인 (프롬프트에 (venv-python2) 표시)
# python --version
# which python

패키지 설치
# pip install requests flask

의존성 목록 생성
# pip freeze > requirements.txt

가상환경 비활성화
# deactivate


4. Python3 가상환경 설정

venv 모듈 사용 (권장)

가상환경 생성
# python3 -m venv venv-python3

가상환경 활성화
# source venv-python3/bin/activate

활성화 확인
# python --version
# which python

pip 업그레이드
# pip install --upgrade pip

패키지 설치
# pip install numpy pandas matplotlib

의존성 목록 생성
# pip freeze > requirements.txt

가상환경 비활성화
# deactivate


 - virtualenv 사용 (선택사항)

virtualenv 설치 (필요한 경우)
# pip3 install virtualenv

가상환경 생성
# python3 -m virtualenv venv-python3

활성화 및 사용법은 동일
# source venv-python3/bin/activate


5. 의존성 패키지 관리

 - requirements.txt 활용

  > 의존성 목록 생성:

현재 설치된 패키지 목록 저장
# pip freeze > requirements.txt

로컬 가상환경 패키지만 저장 (권장)
# pip freeze --local > requirements.txt


  > 의존성 설치:

requirements.txt에서 패키지 설치
# pip install -r requirements.txt

 

 - requirements.txt 파일 위치

  • 프로젝트 루트 디렉터리에 위치해야 하며, 가상환경 폴더 안에 두면 안됩니다. 버전 관리 시스템(Git)에 포함되어야 합니다.

 

 - 패키지 관리 명령어

패키지 설치
# pip install package_name

특정 버전 설치
# pip install package_name==1.2.3

패키지 업그레이드
# pip install --upgrade package_name

설치된 패키지 목록 확인
# pip list

패키지 정보 확인
# pip show package_name

패키지 제거
# pip uninstall package_name


6. 가상환경 관리 및 제거

 - 가상환경 비활성화

현재 활성화된 가상환경에서 실행
# deactivate


 - 가상환경 완전 제거

가상환경 비활성화 후 폴더 삭제
# deactivate
# rm -rf venv-python2
# rm -rf venv-python3


 - 여러 가상환경 관리

프로젝트별 가상환경 구조 (권장)
~/projects/
├── project1/
│   ├── venv/
│   ├── requirements.txt
│   └── main.py
├── project2/
│   ├── venv/
│   ├── requirements.txt
│   └── app.py
└── project3/
    ├── venv/
    ├── requirements.txt
    └── script.py


7. 고급 활용 팁

 - 가상환경 자동 활성화

  > .bashrc 또는 .zshrc에 함수 추가:

프로젝트 디렉터리로 이동하며 가상환경 자동 활성화
function cdenv() {
    cd "$1"
    if [ -d "venv" ]; then
        source venv/bin/activate
    fi
}


 - 가상환경 백업 및 복원

가상환경 백업
# pip freeze > backup_requirements.txt

새 환경에서 복원
# python3 -m venv new_venv
# source new_venv/bin/activate
# pip install -r backup_requirements.txt


 - Python 버전 지정

특정 Python 버전으로 가상환경 생성
# virtualenv --python=/usr/bin/python2.7 py27_env
# virtualenv --python=/usr/bin/python3.8 py38_env

venv의 경우
# /usr/bin/python3.8 -m venv py38_env


8. 문제 해결

 - 일반적인 오류

  > ModuleNotFoundError: 가상환경이 활성화되지 않은 상태에서 패키지를 찾을 수 없는 경우

해결: 가상환경 활성화 확인
# source venv/bin/activate


  > Permission denied: 시스템 전역에 패키지 설치하려 할 때

해결: 가상환경에서 설치하거나 --user 플래그 사용
# pip install --user package_name


  > pip 버전 호환성: Python2에서 최신 pip 버전 사용 시 오류

해결: Python2 호환 pip 버전 설치
# python2 get-pip.py "pip<21.0"


 - 이러한 가상환경 관리 방법을 통해 Python 프로젝트의 의존성을 효과적으로 관리하고 개발 환경의 안정성을 확보할 수 있습니다.

 - 그리고 각 프로젝트마다 독립된 환경을 유지하여 버전 충돌 없이 개발할 수 있습니다.

반응형

1. 개요

  • 파이썬은 “읽기 쉬운 문법”과 “방대한 생태계”를 강점으로 하는 범용 프로그래밍 언어입니다.
  • 빠른 프로토타이핑, 데이터 과학, 자동화, 웹 백엔드, 교육 영역에서 최고의 생산성을 제공합니다.
  • 반면, 초저지연·초고성능이 필요한 시스템, 하드 실시간, 모바일 네이티브 앱 등에는 부적합하거나 추가 도구가 필요합니다.

 

2. 파이썬이란 무엇인가

  • 파이썬은 1991년 귀도 반 로섬이 설계한 고수준, 인터프리터 기반의 범용 프로그래밍 언어입니다.
  • “읽기 쉬운 코드가 유지보수성과 생산성을 높인다”는 설계 철학 하에 들여쓰기 기반 블록, 간결한 문법, 일관된 표준 라이브러리를 채택합니다.
  • 동적 타이핑과 거대한 패키지 생태계(PyPI)를 결합해, 스크립팅부터 대규모 서비스 개발, 데이터 과학, 머신러닝, 자동화에 이르기까지 폭넓게 사용됩니다.

 

 - 핵심 철학(파이선 오브 젠)에 담긴 가치:

  • 명시적, 단순, 가독성 중심
  • 실용주의와 일관성 추구
  • “한 가지—그리고 가급적 한 가지만—명백한 방법”

 

3. 언어적 특징과 개발자 경험

 - 가독성 중심 문법

  • 중괄호 대신 들여쓰기를 사용합니다.
  • 불필요한 보일러플레이트를 줄여 코드량과 인지 부담을 낮춥니다.
  • 리스트 컴프리헨션, 제너레이터 표현식으로 선언적이고 간결한 데이터 처리 코드를 작성할 수 있습니다.

 

 - 동적 타이핑 + 선택적 정적 타입 힌트

  • 런타임 유연성이 높아 실험과 프로토타이핑이 빠릅니다.
  • 대규모 코드베이스에서는 타입 힌트와 정적 분석(mypy, pyright)로 안정성과 퀄리티를 보완할 수 있습니다.

 

 - 풍부한 표준 라이브러리

  • 파일·네트워크·직렬화·동시성(asyncio) 등 범용 기능을 내장합니다.
  • “배터리 포함(batteries included)” 철학으로 외부 의존성 없이도 많은 작업을 시작할 수 있습니다.

 

 - 강력한 패키지 생태계(PyPI)

  • 데이터 과학/AI: NumPy, Pandas, SciPy, scikit-learn, PyTorch, TensorFlow
  • 웹: Django, Flask, FastAPI
  • 자동화/스크립팅: Click, Typer, Rich, Fabric
  • 테스트/품질: pytest, Hypothesis, Black, Ruff
  • 배포/패키징: pip, build, uv, Poetry, Hatch

 

 - 멀티 패러다임

  • 절차적, 객체지향, 함수형 스타일을 모두 수용합니다.
  • 데코레이터, 컨텍스트 매니저, 제너레이터 등 고급 추상화 도구로 깔끔한 API 설계가 가능합니다.

 

 - 동시성 모델

  • I/O 바운드에 적합한 asyncio(코루틴)와 고수준 동시성(Concurrent Futures)을 제공합니다.
  • CPU 바운드 작업은 멀티프로세싱 또는 C 확장/네이티브 가속과 병행하는 것이 일반적입니다.

 

4.  파이썬의 강점

 - 생산성·개발 속도

  • 문법이 단순하고 도구 체인이 성숙해 MVP, PoC, 내부 자동화에 최적화되어 있습니다.
  • 풍부한 예제와 문서, 커뮤니티 Q&A로 문제 해결 시간을 단축합니다.

 

 - 데이터 과학·AI 1급 시민

  • NumPy 기반의 과학 계산, Pandas의 데이터 프레임 모델, Jupyter 노트북 워크플로는 분석-실험-시각화-보고를 하나로 묶습니다.
  • PyTorch/TensorFlow와의 긴밀한 통합으로 연구·프로덕션 양쪽을 지원합니다.

 

 - 웹 백엔드와 API

  • Django로 “올인원” 프레임워크(ORM/관리자/보안 베스트프랙티스), FastAPI로 고성능 타입 주도 API 서버 구축이 가능합니다.
  • ASGI 생태계(Uvicorn, Starlette)로 현대적 비동기 서버 구성이 용이합니다.

 

 - 자동화·DevOps·SRE

  • CLI 도구 작성이 쉽고, 크로스플랫폼 스크립팅에 강합니다.
  • 인프라 제어, 로그 처리, 보안 오케스트레이션과 같은 운영 자동화에서 표준 도구 역할을 합니다.

 

 - 교육 친화성

  • 문법 장벽이 낮아 컴퓨팅 사고, 알고리즘 교육에 적합합니다.
  • 풍부한 시각화·실습 환경(Jupyter, Colab)이 있습니다.

 

 - 확장성·상호운용성

  • Cython, Numba, PyO3(러스트), C/C++ 확장으로 병목을 네이티브로 이전해 성능을 보완할 수 있습니다.
  • FFI를 통해 레거시 라이브러리·시스템과 연결하기 쉽습니다.

 

 - 크로스플랫폼

  • 리눅스, macOS, 윈도우 전반에 동일한 코드베이스를 배치하기 용이합니다.

 

5.  파이썬의 단점과 한계

 - 실행 성능

  • 인터프리터와 GIL(Global Interpreter Lock) 구조로 인해 순수 파이썬 CPU 바운드 작업은 C/C++/Rust 대비 느립니다.
  • 고성능이 필요한 경우 벡터화(NumPy), JIT(Numba), C 확장, 멀티프로세싱, 분산 프레임워크(Ray, Dask)로 우회가 필요합니다.

 

 - 하드 실시간·초저지연 부적합

  • GC 일시중지, 인터프리터 오버헤드로 마이크로초 단위 지연 예산이 빡빡한 시스템 트레이딩, 임베디드 하드 RT에는 부적합합니다.

 

 - 모바일 네이티브/프론트엔드 약세

  • iOS/Android 네이티브 앱 주류 스택이 아니다. Kivy, BeeWare 같은 대안이 있으나 생태계 성숙도는 낮습니다.
  • 브라우저 내 직접 실행은 제한적(Pyodide, WASM 기반은 실험적·특수 목적)입니다.

 

 - 배포·런타임 관리의 복잡성

  • 가상환경, 의존성 충돌, 네이티브 바이너리 의존 패키지(과학계산 스택)의 플랫폼별 빌드 이슈가 초심자에게 어렵습니다.
  • 최근 uv, maturin, prebuilt wheels 확대로 상황은 개선되는 중이나, 팀 규모가 커질수록 정책화가 필요합니다.

 

 - 멀티스레딩 한계

  • I/O 바운드는 좋지만 CPU 바운드에서는 GIL로 스케일링 이득이 제한적입니다.
  • 프로세스 기반 병렬화 또는 네이티브 확장 설계가 필요합니다.

 

6.  어떤 문제에 잘 맞는가

  • 데이터 분석/머신러닝: 탐색적 분석, 피처 엔지니어링, 모델 연구, 배치 추론 파이프라인.
  • 웹/백엔드 API: 스타트업 MVP, 내부 서비스, 관리 도구, 데이터 플랫폼 게이트웨이.
  • 자동화·스크립팅: 로그 파이프라인, 보안 업무 자동화(IOC 수집/정규화), 테스트/빌드 파이프라인.
  • 교육/프로토타이핑: 아이디어 검증, 도메인 지식 모델링, 리서치 퀵샷.

 

 - 조건부로 적합한 영역(보완책 전제)

  • 고성능 계산: NumPy 벡터화, Numba/Cython, GPU 가속(CUDA, PyTorch/TensorRT), 분산(Polars+Ray/Dask/Spark).
  • 데스크톱 앱: Qt(PySide6/PyQt), Electron + PyBridge, BeeWare—요구사항에 따라 실현 가능하나 배포 체계 설계가 핵심.

 

 - 적합하지 않은 영역(대체 기술 고려)

  • 하드 실시간 제어, 초저지연 HFT, 커널/드라이버, 모바일 네이티브 UI, 브라우저 프론트엔드(전통적 SPA).

 

7. 파이썬 3.x 동향과 실무 팁

 - 성능 개선 흐름

  • 버전 3.11/3.12에서 바이트코드 최적화·인터프리터 내부 개선으로 전반적인 속도가 상승했습니다.
  • Numpy/Polars 등 컬럼너 기반·벡터화 엔진과 결합하면 RDBMS 수준의 분석 워크로드도 메모리 내에서 빠르게 처리할 수 있습니다.

 

 - 타입 힌트 적극 활용

  • 팀 협업에서는 타입 주석과 정적 검사(mypy/pyright), 포맷터(Black), 린터(Ruff)를 표준 파이프라인에 포함합니다.
  • FastAPI, Pydantic과 결합하면 스키마-검증-문서화를 한 번에 처리할 수 있습니다.

 

 - 의존성과 가상환경

  • 표준 venv, Poetry/Hatch/uv 중 하나를 팀 규범으로 정하고 락파일 관리로 재현성을 확보합니다.
  • 네이티브 의존 패키지는 사전에 호환 가능한 파이썬 버전/플랫폼 매트릭스를 문서화합니다.

 

 - 테스트와 품질

  • pytest를 기반으로 속성 기반 테스트(Hypothesis), 커버리지, 타입 검사, 포맷/린팅을 CI에 통합합니다.
  • 성능이 중요한 구간은 프로파일링(py-spy, cProfile, scalene)로 병목을 식별해 국소 최적화합니다.

 

 - 배포 전략

  • 서버: 컨테이너(Docker) 이미지 최적화, 멀티스테이지 빌드, slim 베이스, 런타임 OS 패키지 고정.
  • 데스크톱/CLI: PyInstaller/Briefcase/pex/uvx 등으로 단일 바이너리·앱 번들 제공.
  • 서버리스: AWS Lambda/Cloud Functions에서 콜드스타트·사이즈 제한을 고려해 경량화.

 

8. 파이썬 vs 대안 언어 간 간단 비교

  • Go: 단일 바이너리, 쉬운 배포, 우수한 동시성, 빠른 실행. 반면 데이터 과학·ML 생태계는 상대적으로 약함.
  • Rust: 메모리 안전·고성능·제로코스트 추상화. 학습 곡선이 가파르며 빠른 프로토타이핑은 불리.
  • Java/Kotlin: JVM 생태계·성숙한 엔터프라이즈 스택, 강한 타입 안정성. 초기 개발 속도·스크립팅 유연성은 파이썬이 유리.
  • JavaScript/TypeScript: 웹 프론트엔드의 표준, Node.js로 풀스택 가능. 수치·과학 계산은 파이썬 우위.
  • R: 통계·시각화 강점, 연구·분석에 적합. 범용 개발·배포·서비스화는 파이썬 우위.

 

9. 보안·포렌식 관점의 활용 포인트

  • DFIR 자동화: 아티팩트 수집, 로그 정규화·파서, IOC 매칭, 타임라인링(예: plaso, Timesketch와의 연계).
  • 메모리/파일 분석: YARA 바인딩, Volatility 플러그인, PE/ELF 파서, 문자열 추출·정규화 파이프라인.
  • 위협 헌팅: Sigma 룰 변환, Sigma→SIEM 쿼리 변환기, 샌드박스 API 오케스트레이션.
  • 대규모 로그 처리: Polars/Pandas + PyArrow + DuckDB로 스케일업 분석, 필요 시 Spark/Ray로 스케일아웃.

 

10.  결론과 실전 가이드

  • 아이디어 검증이 빠르고, 생태계가 넓으며, 운영 자동화·데이터 과학·웹 API에서 최고의 생산성을 제공한다.
  • 성능이 필요한 부분만 네이티브·분산·벡터화로 보완하는 하이브리드 접근이 가장 현실적이다.
  • 팀 차원에서는 타입 힌트, 포맷/린팅, 테스트, 프로파일링, 패키징 정책을 표준화해 재현성과 품질을 끌어올리는 것이 핵심이다.

 

 - 추천 시작 스택

  • 런타임/관리: Python 3.11+, venv 또는 uv/Poetry
  • 품질: Black, Ruff, mypy/pyright, pytest, pre-commit
  • 웹/API: FastAPI + Pydantic + Uvicorn
  • 데이터: NumPy/Pandas/Polars + PyArrow + DuckDB + Jupyter
  • 성능: Numba/Cython, PyO3(Rust), multiprocessing/Ray

11. 파이썬 2 개발 중단 경과

 - 공식 지원 종료 날짜: 2020년 1월 1일

  • 파이썬 소프트웨어 재단(PSF)이 공식적으로 파이썬 2에 대한 지원을 중단한 날짜입니다.
  • 최종 릴리즈: 파이썬 2.7.18 (2020년 4월 20일 출시)
  • 지원 종료일 이후에도 커뮤니티를 위한 서비스 차원에서 마지막 버전을 출시했습니다.
  • 2020년 1월에 코드 동결(code freeze)이 되었고, 4월에 최종 출시되었습니다.

 

 - 주요 타임라인

  • 2008년: 당초 2015년 지원 종료 예정으로 발표
  • 2010년 7월 3일: 파이썬 2.7.0 출시
  • 2014년: 지원 종료를 2020년으로 5년 연장
  • 2020년 1월 1일: 공식 지원 종료
  • 2020년 4월 20일: 파이썬 2.7.18 최종 출시로 개발 완전 중단

 

 - 파이썬 2.7.18 이후로는 보안 패치를 포함해 어떠한 버그 수정이나 개선 사항도 제공되지 않으며, 새로운 보안 취약점이 발견되더라도 공식적으로는 패치되지 않습니다.

 - 따라서 현재는 파이썬 3.x 버전으로 마이그레이션하는 것이 강력히 권장됩니다.

 

12. 파이썬 3 첫 발표 및 파이썬 2 대비 주요 개선점

 - 파이썬 3 첫 발표 날짜

  • 파이썬 3.0은 2008년 12월 3일에 첫 발표되었습니다. 
  • "파이썬 3000" 또는 "Py3k"라는 코드명으로도 불렸으며, 파이썬 2와는 하위 호환성이 없는 메이저 버전으로 설계되었습니다.

 

 - 파이썬 3의 핵심 설계 철학

  • 파이썬 3.0의 주요 설계 원칙은 "중복된 기능을 제거하여 오래된 방식을 없애는 것"이었습니다.
  • 이는 파이썬의 젠(Zen of Python) 원칙인 "명백한 방법은 하나—그리고 가급적 하나만—있어야 한다"를 구현한 것입니다.

 

 - 파이썬 2 대비 주요 개선점

  > Print 문에서 함수로 변경

  • 파이썬 2: print "Hello World" (문장 형태)
  • 파이썬 3: print("Hello World") (함수 형태)

 

   >> 이 변경으로 일관된 함수 사용법과 더 나은 확장성을 제공합니다.

 

  > 정수 나눗셈 개선

  • 파이썬 2: 7 / 2 = 3 (정수 결과)
  • 파이썬 3: 7 / 2 = 3.5 (실수 결과), 7 // 2 = 3 (정수 나눗셈)
  • 더 직관적이고 수학적으로 정확한 결과를 제공합니다.

 

  > 유니코드 지원 대폭 개선

  • 파이썬 2: 기본적으로 ASCII 인코딩, 유니코드는 별도 정의 필요
  • 파이썬 3: 기본적으로 UTF-8/유니코드 지원
  • 국제화와 다국어 텍스트 처리가 훨씬 쉬워졌습니다.

 

  > 반복자(Iterator) 최적화

  • 파이썬 2: range(), map(), filter() 등이 리스트 반환
  • 파이썬 3: 제너레이터 객체 반환으로 메모리 효율성 증대
  • xrange()가 제거되고 range()가 제너레이터 방식으로 동작.

 

  > 예외 처리 구문 개선

  • 파이썬 2: except IOError, e: (쉼표 사용)
  • 파이썬 3: except IOError as e: (as 키워드 사용)
  • 더 명확하고 일관된 예외 처리 문법을 제공합니다.

 

  > 함수형 프로그래밍 도구 재정리

  • 파이썬 2: reduce() 함수가 전역 네임스페이스에 존재
  • 파이썬 3: functools 모듈로 이동하여 더 체계적 관리

 

  > 변수 스코프 개선

  • 파이썬 2: 루프 변수가 전역 스코프에 누출(variable leakage)
  • 파이썬 3: 변수 스코프가 더 엄격하게 관리됨

 

 - 성능 및 기타 개선사항
  > 성능 향상

  • 문자열 처리, I/O 연산에서 성능 개선
  • 특히 유니코드 처리에서 메모리 효율성이 크게 향상되었습니다.

 

  > 라이브러리 생태계

  • 새로운 라이브러리들이 파이썬 3 우선으로 개발됨
  • 머신러닝, AI, 데이터 분석 등 현대적 애플리케이션에 필요한 라이브러리 지원 강화.

 

  > 보안 및 안정성

  • 더 나은 보안 기능과 안정성 제공
  • 지속적인 버그 수정과 새로운 기능 도입.

 

 - 마이그레이션 도구

  • 파이썬 개발팀은 하위 호환성 문제를 해결하기 위해 2to3 변환 도구를 제공했습니다. 
  • 이 도구는 파이썬 2 코드를 파이썬 3으로 자동 변환하는 기능을 제공하지만, 완벽한 변환은 아니므로 수동 검토와 수정이 필요합니다.

 

 - 파이썬 3의 도입은 처음에는 하위 호환성 문제로 논란이 있었지만, 현재는 파이썬 개발자의 95% 이상이 파이썬 3를 사용하고 있으며, 파이썬 2는 2020년 1월 1일부로 공식 지원이 종료되었습니다.

반응형

+ Recent posts