<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>moongchi.log</title>
        <link>https://velog.io/</link>
        <description>아직은 부족한 것이 많은 화이트햇 해커</description>
        <lastBuildDate>Sun, 27 Apr 2025 17:29:25 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>moongchi.log</title>
            <url>https://velog.velcdn.com/images/smc_ecurity/profile/6e3d31e4-86ed-411d-8575-6bef90c8ad8e/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. moongchi.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/smc_ecurity" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[MS Edge 화면 우측 하단 팝업 스팸 광고 제거(스케어웨어, 멀버타이징, 스팸, 광고, 애드웨어)]]></title>
            <link>https://velog.io/@smc_ecurity/MS-Edge-%ED%99%94%EB%A9%B4-%EC%9A%B0%EC%B8%A1-%ED%95%98%EB%8B%A8-%ED%8C%9D%EC%97%85-%EC%8A%A4%ED%8C%B8-%EA%B4%91%EA%B3%A0-%EC%A0%9C%EA%B1%B0</link>
            <guid>https://velog.io/@smc_ecurity/MS-Edge-%ED%99%94%EB%A9%B4-%EC%9A%B0%EC%B8%A1-%ED%95%98%EB%8B%A8-%ED%8C%9D%EC%97%85-%EC%8A%A4%ED%8C%B8-%EA%B4%91%EA%B3%A0-%EC%A0%9C%EA%B1%B0</guid>
            <pubDate>Sun, 27 Apr 2025 17:29:25 GMT</pubDate>
            <description><![CDATA[<h2 id="개요">개요</h2>
<p>최근 MS Edge 브라우저로 특정 사이트에 접속했다가 화면 우측 하단에 팝업 광고가 계속 발생하게 된 사례를 보았다. <code>백신 설치</code>를 유도하는 알림이었는데, 그 알림을 눌렀을 때 <code>가짜 백신 설치 및 결제</code>를 요구하는 페이지로 넘어가게 되었다. 얼핏 보면 마치 윈도우 디펜더로 정상적인 탐지로 보였지만 사실은 <code>속임수</code>였다. 필자는 해당 방법으로 감염(?)이 된 사례를 처음 들어봤기에 조사 후 다른 사용자들도 이런 피해를 당하지 않았으면 하는 마음에 정리를 해보았다.</p>
<h2 id="공격-흐름">공격 흐름</h2>
<ol>
<li><p>특정 웹 사이트 접속
<img src="https://velog.velcdn.com/images/smc_ecurity/post/31e99138-e353-457c-a4f3-cd619e167b37/image.png" alt=""></p>
</li>
<li><p>수 많은 리다이렉트 발생
<img src="https://velog.velcdn.com/images/smc_ecurity/post/0d894a60-90b3-4ef8-9496-b8e52d438a3f/image.png" alt="">
<img src="https://velog.velcdn.com/images/smc_ecurity/post/e3b79f75-e191-43f2-9017-680db71ce640/image.png" alt=""></p>
</li>
<li><p>캡챠 등을 활용한 정상적인 페이지로 보이도록 위장(?)
<img src="https://velog.velcdn.com/images/smc_ecurity/post/0a781a7d-e1e5-4345-a4fc-feff76ae6250/image.png" alt="">
<img src="https://velog.velcdn.com/images/smc_ecurity/post/3b886998-4a57-452a-be85-5b72cb8f26a3/image.png" alt="">
위와 같이 <code>알림 표시</code> 기능을 허용할 것인지 물어본다.
(허용하지 않으면 겁을 주는 알림이 발생하지 않는다)</p>
</li>
<li><p>백신 사이트 같은 페이지로 이동(노턴 안티바이러스)
<img src="https://velog.velcdn.com/images/smc_ecurity/post/47d075c8-3b8c-40d1-b4a1-8e42c542ba71/image.png" alt=""></p>
</li>
</ol>
<ul>
<li>바이러스 검사를 진행하는 척 하면서 <code>&quot;바이러스가 감지되었습니다.&quot;</code> 라며 사용자에게 <code>겁을 주고 있다.</code> 컴퓨터를 다루기 어려운 사용자는 겁을 먹을 수 밖에 없도록 만든다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/smc_ecurity/post/6fe8ca19-fd99-44b8-8694-3b5c4384f83b/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/smc_ecurity/post/9d8b9e72-7776-4377-ae8a-d9a2f2142750/image.png" alt=""></p>
<ul>
<li>노턴 360 프리미엄의 결제를 유도하고 있는데 결제를 실제로 진행하는 사용자가 얼마나 있을지는 모르겠지만, 그리고 결제를 한다고 하여 정말 백신 프로그램을 얻을 수 있을지도 미지수다. URL 자체는 정상적인 노턴 안티바이러스 코리아로 확인이 된다. 백신이 안 팔리나...</li>
</ul>
<ol start="3">
<li>Edge 브라우저 알림처럼 보이는 팝업이 화면 우측 하단에 등장</li>
</ol>
<p><img src="https://velog.velcdn.com/images/smc_ecurity/post/3a0d17eb-7f31-41a0-930a-1e877033bbe9/image.png" alt=""></p>
<ul>
<li>3번에서 <code>알림 표시</code> 기능을 허용하여 발생하는 알람으로, <code>&quot;바이러스가 감지되었다.&quot;</code> 라는 등의 공포심을 주게 된다.</li>
</ul>
<ol start="4">
<li>알림 클릭 시 가짜 백신 결제 페이지로 이동
<img src="https://velog.velcdn.com/images/smc_ecurity/post/c00fe3ea-21fe-40eb-b221-e525181dd8c5/image.png" alt=""></li>
</ol>
<ul>
<li>해당 알림을 클릭하여 접속 시 노턴 홈페이지로 다시 이동하게 된다. 그리고 이 알람은 초 단위로 계속 발생하게 하여 트레이 아이콘을 볼 수 없고, 사용자 작업 화면을 계속 가리게 되어 작업을 진행할 수 없게 만든다.</li>
</ul>
<h2 id="추측되는-주요-공격-기법">추측되는 주요 공격 기법</h2>
<h3 id="1-스케어웨어scareware">1. 스케어웨어(ScareWare)</h3>
<ul>
<li>말 그대로 <code>PC가 감염되었습니다!</code> 같은 경고를 띄워 공포심을 조장한다.</li>
<li>가짜 백신 설치를 유도하고, 이를 통해 결제를 요구한다.</li>
</ul>
<h3 id="2-멀버타이징malvertising">2. 멀버타이징(Malvertising)</h3>
<ul>
<li>악성 광고 또는 스크립트가 웹사이트에 삽입되어 사용자 브라우저를 감염시키는 공격이다.</li>
<li>악성 광고처럼 보이기도 하고, 리다이렉트 스크립트가 작동하여 멀버타이징의 요소도 있다고 본다.</li>
</ul>
<h3 id="3-피싱">3. 피싱</h3>
<ul>
<li>전통적인 의미의 로그인을 유도하는 피싱은 아니다.</li>
<li>하지만 <code>금전적 피해</code>를 유도했다는 점에서 넓은 의미로 피싱으로 볼 수 있다.</li>
</ul>
<h2 id="대응-방법">대응 방법</h2>
<ul>
<li>의심스러운 사이트 방문 시 즉시 창 닫기<ul>
<li>갑자기 알 수 없는 주소의 여러 사이트로 이동된다거나 할 때 즉시 창을 닫아야 한다.</br></br></li>
</ul>
</li>
<li>알 수 없는 알림 수신 차단하기
<img src="https://velog.velcdn.com/images/smc_ecurity/post/daebed09-6917-4329-8c6b-6aab05466bf2/image.png" alt="">
위 사진과 같이 <code>edge://settings/content/notifications</code> 에 접속하여 알 수 없는 알림이 허용되고 있는 항목을 제거한다.</li>
</ul>
<h2 id="마치며">마치며</h2>
<p>결론적으로 이 사례는 <code>스케어웨어 기반 피싱 + 멀버타이징 요소를 결합한 복합형 공격</code> 으로 판단해야 할 것으로 보인다. 정확히 정해진 공격 유형이 없기 때문이다. </p>
<p>요즘 많은 사람이 흔히 말하는 구글링을 통해 많은 정보를 알아보고는 한다. 
해외의 많은 정보들이 있고 좀 더 폭넓은 검색이 가능하기에 쉽게 이용하지만, 나도 모르게 이런 공격에 노출이 될 수 있다. </p>
<p>평소에 백신 프로그램을 사용하는 습관을 들이고, 의심스러운 사이트는 방문하지 않는 것이 가장 중요하다. 그리고 알림을 허용하느니 이런 의심스러운 메시지가 생길 경우 무턱대고 누르지 말고 한 번 더 생각해 보고, 알아보고 누르는 습관을 들이는 게 좋다.</p>
<p>PC에 직접 감염되는 멀웨어가 아닌 단순한 광고성 페이지로 착각할 수 있지만, 어쩌면 금전적 피해로도 이어질 수 있기 때문에 주의가 필요하다는 말을 전하고 싶었다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[원격코드실행(RCE) 취약점 페이로드(eval(),  Response.Write())]]></title>
            <link>https://velog.io/@smc_ecurity/RCE-attack-payload</link>
            <guid>https://velog.io/@smc_ecurity/RCE-attack-payload</guid>
            <pubDate>Thu, 17 Apr 2025 01:24:44 GMT</pubDate>
            <description><![CDATA[<h2 id="개요">개요</h2>
<p><code>eval(), Response.Write()</code> 메소드가 포함된 HTTP Request를 로그에서 확인하였다.
일반적인 요청에선 해당 메소드를 이용하여 요청하지 않으며, 웹 취약점 점검의 목적으로 요청한 것이 아닌 URL이라면 의심해 볼 여지가 있다.</p>
<p>이번 포스팅에선 이 요청이 어떤 의도를 가진 공격인지 정리해보려고 한다.</p>
<h2 id="페이로드-구조">페이로드 구조</h2>
<pre><code>GET /search.asp?searchword={if:eval(action)}99&amp;action=Response.Write(Hex(504286))</code></pre><h3 id="--evalaction">- <code>eval(action)</code></h3>
<ul>
<li>해당 구문은 문자열을 코드로 가정하여 실행하는 동작을 하며, 보통 특정 코드 문자열을 받아 실행하게 되어 보안상 위험한 함수로 간주된다. <code>action</code> 파라미터에 특정 코드를 담아 실행시키기를 유도하고 있다. </li>
</ul>
<h3 id="--responsewritehex504286">- <code>Response.Write(Hex(504286))</code></h3>
<ul>
<li>해당 구문은 <code>504286</code> 라는 숫자를 16진수로 변환해서 출력하라는 의미이다.</li>
<li><code>504286</code> → <code>7B9BE</code> (16진수)</li>
</ul>
<h2 id="공격-판단">공격 판단</h2>
<ol>
<li><code>eval()</code>은 실 서비스에선 솔직히 쓸 일이 없음(개발자들도 안씀)<ul>
<li>정상적인 웹 사용자가 URL 파라미터에 <code>eval()</code> 같은 함수를 넣는 경우는 거의 없다.</li>
</ul>
</li>
<li>자동화된 공격도구의 전형적인 패턴<ul>
<li><code>eval()</code>, <code>exec()</code>, <code>Response.Write()</code> 등은 공격자들이 코드 실행이 가능한 지 탐지하기 위해 자동화 도구에서 자주 사용되는 패턴이다.</li>
</ul>
</li>
<li>확인된 웹 취약점 점검 일정이 없기도 하고, 외부에서 요청한 IP에 대해서도 업무 연관성이 존재하지 않았다.</li>
</ol>
<h2 id="마치며">마치며</h2>
<p>해당 공격은 서버가 외부 입력을 <code>eval</code> 함수로 실행할 수 있는지 테스트하려는 원격 코드 실행(RCE) 공격 페이로드로 보인다. 실행 결과로 <code>7B9BE</code>가 반환된다면 해당 서버는 취약한 상태라고 파악할 수 있는 것이다.</p>
<p>이러한 경우에 &quot;이건 점검 목적이겠지&quot; 라고 먼저 가정하는 건 보안 상 매우 위험한 판단이다.
실 서비스에 대한 무단 스캐닝은 그 자체로 공격 행위이며, 탐지 시 절차에 따라 대응해야한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[DB 암호화 방식(API, Plug-In, Hybrid, TDE) - Types of Database Encryption Methods]]></title>
            <link>https://velog.io/@smc_ecurity/DB-%EC%95%94%ED%98%B8%ED%99%94-%EB%B0%A9%EC%8B%9D</link>
            <guid>https://velog.io/@smc_ecurity/DB-%EC%95%94%ED%98%B8%ED%99%94-%EB%B0%A9%EC%8B%9D</guid>
            <pubDate>Tue, 15 Apr 2025 10:28:47 GMT</pubDate>
            <description><![CDATA[<h2 id="개요">개요</h2>
<p>DB 내 개인정보 및 민감정보 보호를 위한 암호화 방식은 보안성과 운영 편의성, 시스템 구조에 따라 다양하게 구분된다. </p>
<blockquote>
<p>컬럼 암호화 방식 - <code>Plug-In</code>, <code>API</code>, <code>Hybrid(Plug-In + API)</code>
블록 암호화 방식  - <code>TDE</code></p>
</blockquote>
<p>본 포스팅에서는 암호화 적용 범위에 따라 크게 <code>컬럼 암호화 방식</code>, <code>블록 암호화 방식</code> 두 방식으로 나누어 설명하며, 위와 같이 세부적인 방식들의 개념과 동작 원리를 이해해 볼 것이다.</p>
<hr>
<h2 id="컬럼-암호화">컬럼 암호화</h2>
<blockquote>
<p>컬럼 암호화 방식이란 특정 열(Column) 단위로 암호화를 적용하는 방식</p>
<blockquote>
<p>ex) 주민등록번호, 카드번호, 계좌번호와 같은 민감 데이터 컬럼만 암호화</p>
</blockquote>
</blockquote>
<p>기본적으로 컬럼 암호화 방식에서의 암호 알고리즘은 모두 <code>SHA-256/384/512</code> 및 <code>키 길이 128bit 이상의 AES, 3DES, SEED, ARIA</code> 등을 지원한다.</p>
<p>컬럼 암호화 방식에는 아래와 같이 총 3가지가 존재한다.</p>
<table>
<thead>
<tr>
<th>방식</th>
<th align="left">운영 형태</th>
<th align="left">특징</th>
</tr>
</thead>
<tbody><tr>
<td><strong>Plug-In</strong></td>
<td align="left">DB 서버</td>
<td align="left">구축 시 일부 애플리케이션 수정이 필요하며                                              DB 서버의 성능에 대한 검토 필요</td>
</tr>
<tr>
<td><strong>API</strong></td>
<td align="left">DB &amp; 애플리케이션 서버</td>
<td align="left">Plug-In 방식에 비해 DB 서버에 영향을 주지                                          않으나 구축 시 애플리케이션의 수정 필요</td>
</tr>
<tr>
<td><strong>Hybrid</strong></td>
<td align="left">DB &amp; 애플리케이션 서버</td>
<td align="left">Plug-In과 API 방식이 조합된 형식</td>
</tr>
</tbody></table>
<hr>
<h3 id="1-plug-in-방식">1. Plug-In 방식</h3>
<blockquote>
<ul>
<li>암·복호화 모듈을 <code>DB 서버</code> 내·외부에 설치하고, 이 곳에서 암·복호화를 수행하는 구조</li>
</ul>
</blockquote>
<ul>
<li>애플리케이션 코드를 수정할 필요가 없음<blockquote>
<blockquote>
<p><em>동작 구조 : Application → SQL 실행 → Plug-in 모듈이 암·복호화 → DBMS</em></p>
</blockquote>
</blockquote>
</li>
</ul>
<p>보통 가이드들에선 플러그인을 DB 서버 내부에 설치하여 진행한다고 되어있는데
현업에선 내·외부 모두 설치하여 이용할 수 있다고 한다.</p>
<table>
<thead>
<tr>
<th>Plug-In 위치</th>
<th align="left">암·복호화 수행 주체</th>
<th align="left">보안 위험</th>
</tr>
</thead>
<tbody><tr>
<td><strong>DBMS 내부</strong></td>
<td align="left">DB 서버</td>
<td align="left">낮음 (상대적으로 안전)</td>
</tr>
<tr>
<td><strong>DB 클라이언트</strong></td>
<td align="left">애플리케이션 서버</td>
<td align="left">높음 (계정/키 탈취 시 평문 유출)</td>
</tr>
</tbody></table>
<p>WAS에 Plug-In이 설치되어 있다고 가정했을 때 WAS는 사용자 요청을 처리하기 위해 DB에 접근해서 데이터를 조회하거나 저장하거나 하는데, 이때 WAS가 DB에 접속할 수 있도록 하기 위해 DB 계정과 비밀번호 정보를 가지고 있어야 한다.</p>
<p>WAS의 설정 파일에 DB 접속 정보가 하드코딩 돼있거나 환경변수로 지정되어 있을 때,
이 DB 계정 정보가 유출이 된다면 공격자는 평문을 얻을 수 있는 상황이 된다.</p>
<p>실제로도 위와 같은 이유로 DBMS 내부에 설치하여 암·복호화를 수행하는 방식을 많이 이용한다고 한다. 그래서 가이드에서도 애초에 보안적인 측면에서 위험도가 있는 방법을 아예 삭제시킨 게 아닐까 하는 생각이 든다.</p>
<h4 id="장점">장점</h4>
<ul>
<li>애플리케이션 수정이 거의 없음<ul>
<li>암복호화가 SQL 처리 과정 중 Plug-in에 의해 자동으로 이루어짐</li>
<li>예외 처리, 데이터 타입 등 일부 보완을 위해 약간의 수정은 존재할 수 있음</li>
</ul>
</li>
</ul>
<h4 id="단점">단점</h4>
<ul>
<li>Plug-In 이 어디 설치되느냐에 따라 보안성이 달라짐<ul>
<li>클라이언트에 설치되면 공격자가 복호화 가능</li>
</ul>
</li>
</ul>
<hr>
<h3 id="2-api-방식">2. API 방식</h3>
<blockquote>
<ul>
<li>애플리케이션에서 직접 암·복호화 API를 호출하여 데이터를 처리하는 방법</li>
</ul>
</blockquote>
<ul>
<li>ex) <code>encrypt(value)</code>, <code>decrypt(value)</code> 같은 함수 호출<blockquote>
<blockquote>
<p>동작 구조 : Application → 암·복호화 API 호출 → 암호화된 데이터 DB 저장</p>
</blockquote>
</blockquote>
</li>
</ul>
<p>API 방식에서의 암·복호화는 애플리케이션 코드 안에서 직접 수행된다.
암·복호화 로직이 코드로 직접 구현되거나, 암호화 모듈을 호출하는 방식이다.</p>
<p>예를 들어, 사용자가 주민등록번호를 입력하고 전송했을 때 애플리케이션 코드에서 암호화가 진행되고 출력된 암호문을 DB에 저장시킨다. 조회 시 애플리케이션에서 암호문을 불러와 복호화하는 방식이다.</p>
<p>위 내용을 봤을 때 한 가지 의문이 들었었는데 클라이언트가 개인정보를 전송했을 때 입력 값이 WEB을 거쳐 WAS에 도달할 때까지 평문 상태로 이동하게 되는 문제이다. 이 문제는 따로 HTTPS(SSL)나 VPN 등으로 구간 암호화를 진행하면 되겠다고 생각이 들었다. 꼬리에 꼬리를 무는 보안...</p>
<h4 id="장점-1">장점</h4>
<ul>
<li>암호화 대상과 범위를 개발자가 완전히 통제 가능</li>
<li>데이터 처리 전 암호화되므로 <code>가장 강력한 보안성 제공</code></li>
</ul>
<h4 id="단점-1">단점</h4>
<ul>
<li>애플리케이션 코드 대폭 수정 필요</li>
<li>운영 중인 서비스엔 적용 난이도가 높음<ul>
<li>차세대 시스템 개발 등에 기존 어플리케이션에 대한 전면적인 수정이 가능한 경우 적용</li>
</ul>
</li>
</ul>
<hr>
<h3 id="3-hybrid-방식">3. Hybrid 방식</h3>
<blockquote>
<ul>
<li>암·복호화는 기본적으로 Plug-In 방식으로 처리되지만,
  복잡한 경우나 일부 민감 컬럼은 API 방식으로 우회처리하는 방식</li>
</ul>
</blockquote>
<p>일반 SQL은 Plug-In이 처리하고 특정 중요 컬럼은 애플리케이션이 직접 API 호출로 암호화하는 흐름이다.</p>
<h5 id="hybrid-방식-예시java--jdbc완전한-코드-아님">Hybrid 방식 예시(Java + JDBC)(완전한 코드 아님!)</h5>
<pre><code class="language-java">// 주민번호는 API 방식으로 직접 암호화
String rrnPlain = &quot;000101-1234567&quot;;
String encryptedRRN = Encryptor.encrypt(rrnPlain); // 직접 암호화 수행

// 전화번호는 Plug-in 방식으로 처리되므로, 그냥 평문으로 넣음
String name = &quot;뭉치치&quot;;
String phone = &quot;010-1234-5678&quot;;

// SQL 구성 (Plug-in이 개입할 수 있도록 일반 SQL 그대로 사용)
String query = &quot;INSERT INTO 고객 (이름, 전화번호, 주민번호) VALUES (?, ?, ?)&quot;;

try (Connection conn = dataSource.getConnection();
     PreparedStatement pstmt = conn.prepareStatement(query)) {

    pstmt.setString(1, name);               // 평문
    pstmt.setString(2, phone);              // 평문 (Plug-in이 암호화)
    pstmt.setString(3, encryptedRRN);       // 암호문 (API 직접 암호화)

    pstmt.executeQuery();
}</code></pre>
<p>위와 같이 고객이라는 테이블에 이름, 전화번호, 주민번호를 삽입하는 SQL 쿼리를 예를 들었는데,
개인정보보호법에 따르면 이름, 전화번호는 반드시 암호화해야 하는 정보가 아니다.</p>
<p>그러나 다른 정보와 결합하여 개인을 식별할 수 있다면 그것은 개인정보가 되기도 하고,
기본적으로 개인정보처리자는 안전성 확보에 필요한 기술적·관리적 및 물리적 조치를 해야 한다.</p>
<p><code>모든 개인정보를 암호화하는 경우 보호 수준은 높아질 수 있으나 개인정보 처리자의 부담은 커지므로 전화번호 정도는 Plug-In 방식으로 암호화를 진행 후 DB에 저장하고, 주민등록번호는 따로 내부적으로 정한 암호화 API로 암호화하여 암호문을 바인딩 해서 DB에 저장하는 방식으로 필자는 Hybrid 방식에 대해 예를 들었다.</code></p>
<p><strong>(잘못된 예시인 경우 댓글로 지적해주시면 감사하겠습니다😅😂)</strong></p>
<h4 id="장점-2">장점</h4>
<ul>
<li>애플리케이션 수정을 최소화하면서 민감 정보는 더 강하게 보호</li>
<li>유연성과 보안성을 동시에 고려할 때 사용</li>
</ul>
<h4 id="단점-2">단점</h4>
<ul>
<li>구조가 복잡해지고, 관리 포인트가 증가</li>
<li>Plug-In과 API 모두 관리해야 하기에 운영에 대한 이슈가 발생할 가능성 존재</li>
</ul>
<hr>
<h2 id="블록-암호화">블록 암호화</h2>
<blockquote>
<p>블록 암호화 방식이란 데이터를 저장소에 저장할 때 
<code>저장단위(블록 or 파일)</code>를 기준으로 암호화하는 방식</p>
</blockquote>
<p>블록 암호화 방식 중에선 <code>TDE</code> 라는 방식을 이해해 볼 것이다.</p>
<table>
<thead>
<tr>
<th>방식</th>
<th align="left">운영 형태</th>
<th align="left">특징</th>
</tr>
</thead>
<tbody><tr>
<td><strong>TDE</strong></td>
<td align="left">DB 서버</td>
<td align="left">어플리케이션 수정 필요 없음,  기존 시스템에 영향이 적고 성능이 뛰어나지만<br> DBMS 종류 및 버전에 따른 지원 가능 여부 확인 필요</td>
</tr>
</tbody></table>
<p>TDE 방식에서 암호 알고리즘은 <code>SHA-256/384/512</code> 및 <code>키 길이 128bit 이상의 AES, 3DES</code> 등을 지원한다.</p>
<hr>
<h3 id="1-tde-방식">1. TDE 방식</h3>
<blockquote>
<ul>
<li>DB에서 데이터를 <code>디스크에 저장될 때 자동으로 암호화하고, 읽을 때 자동으로 복호화</code>하는 방식</li>
</ul>
</blockquote>
<h4 id="암호화-대상">암호화 대상</h4>
<p>TDE는 보통 아래와 같은 <code>저장 단위(Block)</code>에 적용된다.</p>
<table>
<thead>
<tr>
<th>암호화 대상</th>
<th align="left">설명</th>
</tr>
</thead>
<tbody><tr>
<td><strong>테이블 스페이스</strong></td>
<td align="left">전체 테이블이 저장된 논리적인 영역</td>
</tr>
<tr>
<td><strong>DB File</strong></td>
<td align="left">DB가 물리적으로 저장되는 파일</td>
</tr>
<tr>
<td><strong>로그 파일</strong></td>
<td align="left">redo 로그, 백업 로그 등</td>
</tr>
<tr>
<td><strong>백업 파일</strong></td>
<td align="left">백업 덤프 파일도 암호화 가능</td>
</tr>
</tbody></table>
<h4 id="동작-흐름">동작 흐름</h4>
<pre><code> 1. 애플리케이션이 평문 데이터를 SQL로 전송
 2. DBMS가 데이터를 디스크에 쓸 때 자동으로 암호화
 3. 디스크에선 암호문 형태로 저장
 4. SELECT로 데이터를 읽으면 DBMS가 자동 복호화 후 평문 전달</code></pre><p>위 동작 흐름을 보면 개발자는 암호화된 줄도 모를 정도로 무관심하게 사용할 수 있다.
근데 저 흐름을 봤을 때 한가지 의문점이 든다. </p>
<p>WAS ↔ DB 구간의 데이터는 평문 노출 가능성이 생기는 것이다. </p>
<p>따로 저 구간도 암호화를 하면 되겠지만 위에서 배운 내용을 기반으로 좋은 방식이 하나 떠올랐다.</p>
<p><strong>바로 <code>TDE + API</code> 를 조합하는 방식이다.
민감한 데이터에 대해 WAS→DB 전송 전에 API 방식으로 애플리케이션 레벨에서 암호화하고,
TDE 방식으로 암호화하여 디스크에 저장하면 해당 구간에서의 평문 노출은 없을 것이다.</strong></p>
<p><strong>이 방식은 실무에서도 많이 쓰이고, 금융권이나 공공기관에선 필수적인 보안 절차로 간주된다고 한다.</strong></p>
<p>물론 쿼리 구조 자체가 노출이 된다거나, 암호화 하지 않은 일반 컬럼들이 노출이 될 가능성이 존재하여 네트워크 구간을 따로 암호화를 적용하는 경우가 많다.</p>
<h4 id="장점-3">장점</h4>
<ul>
<li>기존 시스템 수정이 거의 필요 없어서 설치/적용이 간단</li>
<li>운영/유지보수가 편함</li>
</ul>
<h4 id="단점-3">단점</h4>
<ul>
<li>중요한 컬럼만 따로 암호화하는 것은 불가</li>
<li>DB 계정이 탈취되면 평문의 노출 위험이 존재</li>
</ul>
<hr>
<h2 id="마치며">마치며</h2>
<p>사실 DB 암호화에 대해 깊이 생각해 본 적은 없었다.</p>
<p>그저 DB에는 정보가 있으니 암호화가 중요하다는 정도는 알고 있었고, 어떤 방식이 있는지, 어떻게 적용이 되는지에 대해 구체적으로 고민한 적은 없었다.</p>
<p>회사 업무를 진행하다가 얼떨결에 공부하게 되었는데, 이렇게 깊은 내용들이 있었고, 이 내용들이 하나씩 이해가 되기 시작하면서 DB 암호화의 중요성을 더욱 느끼게 되었다.</p>
<p>DB 암호화 방식에 여러 가지가 있다는 것을 알게 되었고,
단일 방식만 사용했을 때 발생하는 문제점들이 무엇이 있을까에 대해 생각해 보았고,
그 문제점들을 해결하기 위해 어떤 방식을 하이브리드로 조합해야 할 지도 생각해 볼 수 있는 좋은 기회가 되었다.
<br><br></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[새로운 시작]]></title>
            <link>https://velog.io/@smc_ecurity/%EC%83%88%EB%A1%9C%EC%9A%B4-%EC%8B%9C%EC%9E%91</link>
            <guid>https://velog.io/@smc_ecurity/%EC%83%88%EB%A1%9C%EC%9A%B4-%EC%8B%9C%EC%9E%91</guid>
            <pubDate>Mon, 14 Apr 2025 06:47:51 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>이 블로그에선 정보보안에 관련된 내용을 주로 담을 예정이다.
내가 이 분야를 사랑하기 때문이고, 현재 내가 일하고 있는 분야이기 때문이다.</p>
</blockquote>
<p><strong>&lt; 처음은 뭐든지 쉽지 않다. 그래서 더욱 의미 있는 것 &gt;</strong></p>
<p>나는 차를 좋아한다. 
그리고 내 재능을 기부하는 것을 좋아한다.</p>
<p>자동차 동호회 카페에 내가 아는 지식들을 공유하면서, 
점점 쌓여가는 포스팅이 나만의 자산이 되기도 할 것이다.
회원들이 내 포스팅을 읽고 도움을 받아 고맙다고 인사해 줄 때, 나는 큰 보람을 느낀다.</p>
<p>원래 내 삶의 방식도 ‘아낌없이 주는 나무’처럼,
내가 희생되더라도 타인이 도움을 얻고 기뻐하는 모습을 보며 뿌듯함을 느껴 왔다.
상당히 이타적인 삶이라고 볼 수 있는데, 물론 장점도 있지만 단점도 있을 것이다.</p>
<p>그러나 단점을 이기는 장점이 있다고 느꼈기에,
앞으로도 나의 삶은 이러한 방식으로 흘러갈 것이다.</p>
<p>비록 시작에 불과하지만, 이 블로그가 나의 영양분이 되기를 바라며
앞으로 적든 많든 불특정 다수에게 도움이 되기를 희망한다.</p>
<p>“늦었다고 생각할 때가 가장 빠른 때”이고,
“미래에 후회할 현재를 만들지 말자”는 나의 철학,
그리고 “하면 된다”라는 우리 집의 가훈을 새기며
블로그를 운영해 보려고 한다.</p>
<p>빠르게 달려갈 욕심은 없지만,
느리게 달려갈 생각도 없다.</p>
<p>천천히, 그러나 꾸준히 달릴 것이다.</p>
<p><em>-by. 뭉치치</em></p>
]]></description>
        </item>
    </channel>
</rss>