<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>ojun-log.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Sun, 30 Aug 2026 05:59:15 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>ojun-log.log</title>
            <url>https://velog.velcdn.com/images/ojun-log/profile/8bd320be-5001-4d72-a1af-35a3edcf85e5/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. ojun-log.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/ojun-log" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[VMware 칼리 ↔ VSCode SSH 연결]]></title>
            <link>https://velog.io/@ojun-log/VMware-%EC%B9%BC%EB%A6%AC-VSCode-SSH-%EC%97%B0%EA%B2%B0</link>
            <guid>https://velog.io/@ojun-log/VMware-%EC%B9%BC%EB%A6%AC-VSCode-SSH-%EC%97%B0%EA%B2%B0</guid>
            <pubDate>Sun, 30 Aug 2026 05:59:15 GMT</pubDate>
            <description><![CDATA[<h1 id="vmware-칼리-↔-vscode-ssh-연결-시행착오">VMware 칼리 ↔ VSCode SSH 연결 시행착오</h1>
<h2 id="배경">배경</h2>
<p>드림핵 워게임 풀 때마다 바보같지만 이러한 과정을 반복하고 있었다.</p>
<ol>
<li>칼리에서 워게임 소스코드 다운</li>
<li>소스코드를 호스트로 복붙</li>
<li>VSCode로 열어서 분석하고 주석 달고 Writeup 작성</li>
<li>다시 칼리로 복붙</li>
<li>칼리 안 워게임 폴더에 주석 단 소스코드랑 README.md(write-up) 넣고 git 커밋</li>
</ol>
<p>매번 파일을 호스트↔게스트로 왔다갔다 옮기는 게 너무 번거로웠다. 하지만 VSCode에 <strong>Remote-SSH</strong>라는 기능을 쓰면 한방에 해결된다길래 시도해봤는데 생각보다 오래걸렸지만 성공했다!</p>
<p>여담으로 SSH는 정보기 공부할 때 많이 나오는 개념중에 하나였지만 실제로 사용해본적은 없었기 때문에 막연한 기능이라고 생각하고 넘어갔었다.(부끄러운일이다..)</p>
<h2 id="예상-결과">예상 결과</h2>
<ul>
<li>SSH config 파일에 <code>HostName</code>, <code>User</code>, <code>IdentityFile</code> 정도만 적으면 바로 연결될 줄 알았다.</li>
<li>드림핵 강의에서 알려준 방식(근데 이거 VirtualBox 기준이었음)을 VMware에 그대로 적용하면 될 줄 알았다.</li>
</ul>
<h2 id="실제-결과-겪은-문제들">실제 결과 (겪은 문제들)</h2>
<h3 id="1-드림핵-가이드는-virtualbox-기준이었음">1. 드림핵 가이드는 VirtualBox 기준이었음</h3>
<p>드림핵에서 알려준 포트 포워딩 방식:</p>
<pre><code>이름: SSH
프로토콜: TCP
호스트 포트: 22
게스트 포트: 22</code></pre><p>근데 여기 <strong>게스트 IP 입력하는 칸이 없다.</strong> VirtualBox NAT 엔진이 알아서 게스트를 찾아서 연결해주는 구조라서 그렇다.</p>
<p>하지만 VMware는 달랐다. 포트 포워딩 규칙에 <strong>게스트(가상머신) IP를 직접 입력해야만</strong> 규칙이 성립하는 것이었다. 이 차이를 모르고 드림핵 가이드 그대로 따라가려다가 한참 헤맸었다..</p>
<h3 id="2-vmware-nat-settings-버튼이-안-보임">2. VMware NAT Settings 버튼이 안 보임</h3>
<p><img src="https://velog.velcdn.com/images/ojun-log/post/b0529475-c908-46e3-948c-7be534146dad/image.png" alt=""></p>
<p>VM 설정 창(Network Adapter → Advanced)에는 NAT Settings 관련 버튼 자체가 없었다. 알고 보니 <strong>Virtual Machine Settings 창이 아니라 Edit → Virtual Network Editor</strong>로 들어가야 하는 메뉴였다.</p>
<h3 id="3-virtual-network-editor에서도-add-버튼이-안-눌림">3. Virtual Network Editor에서도 Add 버튼이 안 눌림</h3>
<p><img src="https://velog.velcdn.com/images/ojun-log/post/8ecc7ab1-6227-4196-a19a-bc60ac8dea3f/image.png" alt=""></p>
<p>Virtual Network Editor → VMnet8(NAT) → NAT Settings → Port Forwarding까지는 들어갔는데 이번엔 <strong>Add... 버튼이 아예 비활성화</strong>돼있었다.</p>
<p>원인은 <strong>관리자 권한</strong>이었다. VMware를 일반 권한으로 켜면 네트워크 설정 파일에 쓰기 권한이 없어서 편집 자체가 막히기 때문에, 우클릭 → &quot;관리자 권한으로 실행&quot;으로 다시 켜니까 바로 해결되었다.</p>
<h3 id="4-규칙-추가했는데-창-닫았다-열면-사라져있음">4. 규칙 추가했는데 창 닫았다 열면 사라져있음</h3>
<p>Add로 규칙(Host Port 22 → 칼리 IP:22) 넣고 OK 눌렀는데, 창 다시 열어보니까 <strong>테이블이 텅 비어있다.</strong> 이것도 결국 관리자 권한 문제였다. — 입력은 되는 것처럼 보이는데 실제 저장은 조용히 실패하고 있었던 것! 관리자 권한으로 재실행하고 다시 넣으니까 이번엔 사라지지 않았다.</p>
<h3 id="5-칼리-ip가-dhcp라서-매번-바뀔-수-있는-거였음">5. 칼리 IP가 DHCP라서 매번 바뀔 수 있는 거였음</h3>
<p>포트 포워딩 규칙에 넣은 게스트 IP가 칼리가 DHCP로 받은 값이었다. <code>ip a</code> 를 입력해보니 <code>dynamic</code>, <code>valid_lft 1477sec</code>처럼 임대 시간이 붙어있는 임시 주소였다. — 재부팅하면 바뀔 수 있는 상태였던 것</p>
<p>포트 포워딩 규칙은 특정 IP 하나를 딱 박아두는 방식이라 칼리 IP가 바뀌면 그 규칙 자체가 의미 없어진다.</p>
<h3 id="6-connection-refused">6. Connection refused</h3>
<p>키를 등록하려고 이 명령어 쳤는데 (Windows PowerShell)</p>
<pre><code class="language-powershell">type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh ojun@127.0.0.1 -p 22 &quot;mkdir -p ~/.ssh &amp;&amp; cat &gt;&gt; ~/.ssh/authorized_keys&quot;</code></pre>
<p>&quot;내 윈도우 공개키를 칼리로 전송해서 거기 authorized_keys 파일 끝에 추가해라&quot; 라는 명령어이다.</p>
<pre><code>ssh: connect to host 127.0.0.1 port 22: Connection refused</code></pre><p><code>Connection refused</code>는 타임아웃이랑 다르게 <strong>요청은 도착했는데 응답하는 게 없다</strong>는 뜻이라서 포트 포워딩 규칙이 진짜 적용됐는지부터 다시 확인해야 했다. 확인해보니 역시나 4번이랑 똑같은 이유로 규칙이 저장 안 된 상태였다.</p>
<h2 id="원인-분석">원인 분석</h2>
<p>정리하면 결국 원인은 두 가지로 좁혀짐.</p>
<ol>
<li><strong>드림핵 가이드(VirtualBox)랑 VMware의 포트 포워딩 구현 방식이 다름.</strong> VirtualBox는 게스트 IP를 알아서 추론하는데 VMware는 직접 입력해줘야 한다.</li>
<li><strong>VMware Virtual Network Editor는 관리자 권한 없이 켜면 설정 저장이 조용히 실패함.</strong> 에러 메시지 하나도 안 뜨고 그냥 입력한 게 사라지니까 원인 찾는 데 시간 엄청 걸렸다.</li>
</ol>
<p>추가로 칼리 IP가 DHCP라 유동적이라는 것까지 겹쳐서 포트 포워딩 규칙을 잘 넣어도 재부팅하면 다시 깨질 수 있는 상태였다.</p>
<h2 id="해결">해결</h2>
<h3 id="1-칼리-ip-고정-networkmanager-방식">1) 칼리 IP 고정 (NetworkManager 방식)</h3>
<p>최신 칼리는 <code>/etc/network/interfaces</code> 방식이 아니라 NetworkManager로 관리된다. <code>nmcli</code>로 고정함(클로드의 힘을 빌렸다^^)</p>
<pre><code class="language-bash">nmcli connection show
# → &quot;Wired connection 1&quot; 확인

sudo nmcli connection modify &quot;Wired connection 1&quot; ipv4.addresses 192.168.xxx.xxx/24
sudo nmcli connection modify &quot;Wired connection 1&quot; ipv4.gateway 192.168.xxx.x
sudo nmcli connection modify &quot;Wired connection 1&quot; ipv4.dns &quot;8.8.8.8 1.1.1.1&quot;
sudo nmcli connection modify &quot;Wired connection 1&quot; ipv4.method manual
sudo systemctl restart NetworkManager</code></pre>
<p><code>ip a</code>로 다시 확인했을 때 <code>dynamic</code> 표시가 사라지고 <code>valid_lft forever</code>로 바뀐 것을 보고 고정되었음을 알 수 있었다.</p>
<h3 id="2-vmware-관리자-권한으로-재실행하고-포트-포워딩-다시-설정">2) VMware 관리자 권한으로 재실행하고 포트 포워딩 다시 설정</h3>
<pre><code>Host Port: 22
Type: TCP
Virtual Machine IP Address: 192.168.xxx.xxx
Virtual Machine Port: 22
Description: SSH to Kali</code></pre><p>이번엔 창을 닫았다 열어도 규칙이 사라지지 않는것을 확인</p>
<h3 id="3-ssh-서버-켜기">3) SSH 서버 켜기</h3>
<pre><code class="language-bash">sudo systemctl enable --now ssh
sudo systemctl status ssh</code></pre>
<p><code>active (running)</code>, <code>Server listening on 0.0.0.0 port 22</code> 로그 확인!</p>
<h3 id="4-ssh-키-만들고-등록-winodes-powershell">4) SSH 키 만들고 등록 (Winodes PowerShell)</h3>
<pre><code class="language-powershell">ssh-keygen -t ed25519
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh ojun@127.0.0.1 -p 22 &quot;mkdir -p ~/.ssh &amp;&amp; cat &gt;&gt; ~/.ssh/authorized_keys&quot;</code></pre>
<h3 id="5-ssh-config-작성">5) SSH config 작성</h3>
<pre><code class="language-ssh">Host linuxvm
    HostName 127.0.0.1
    Port 22
    User ojun
    IdentityFile ~/.ssh/id_ed25519</code></pre>
<h3 id="6-vscode-remote-ssh-연결">6) VSCode Remote-SSH 연결</h3>
<p><img src="https://velog.velcdn.com/images/ojun-log/post/56df7bd6-0442-4212-b42a-db6863aabbb7/image.png" alt=""></p>
<p>Remote - SSH 확장 설치 → <code>Ctrl+Shift+P</code> → <code>Remote-SSH: Connect to Host</code> → <code>linuxvm</code> 선택 → 왼쪽 아래에 <code>SSH: linuxvm</code> 뜨면 성공</p>
<h2 id="결과-확인">결과 확인</h2>
<p>VSCode 터미널에 칼리 프롬프트(<code>ojun@kali:~$</code>)가 떠서 신기했다. <code>~/Dreamhack</code> 폴더를 Open Folder로 열어서 파일을 직접 편집하고 저장해봤는데 저장한 내용이 칼리 파일시스템에 그대로 반영되는 것까지 확인함. 이제 다운로드 → 복붙 → 편집 → 재복붙으로 이어지던 과정이 칼리 안에서 한 번에 끝나게 된 것이다.</p>
<h2 id="참고--보안-관련-메모">참고 — 보안 관련 메모</h2>
<p>SSH가 <code>0.0.0.0</code>(모든 인터페이스)에서 리스닝 중인 게 좀 걸려서 클로드에게 물어보니, 결론적으로는 VMware NAT(vmnet8) 네트워크가 호스트 밖에서는 아예 접근 불가능한 사설 네트워크라 실질적 위험은 없지만 그래도 방어적으로 비밀번호 인증은 꺼두라고 하였다.</p>
<pre><code class="language-bash"># /etc/ssh/sshd_config
PasswordAuthentication no</code></pre>
<pre><code class="language-bash">sudo systemctl restart ssh</code></pre>
<p>이러면 SSH 키 없이는 접속 자체가 불가능해져서 무차별 대입 공격 걱정을 덜 수 있다.</p>
<h2 id="느낀-점">느낀 점</h2>
<p>VirtualBox 기준 가이드를 VMware에 그대로 적용하려다 많이 고생했다. 두 가상화 프로그램의 NAT 구현 방식 차이(게스트 IP 자동 추론 여부)를 미리 알았으면 훨씬 빨리 끝났을 것이다. 또한 GUI 설정 창이 에러 없이 조용히 실패하는 경우(관리자 권한 문제)는 디버깅이 까다롭다는 것을 느꼈다. — 다음부턴 이런 종류의 문제를 만나면 권한 문제부터 먼저 의심해봐야겠다.</p>
<p>보안공부를 하는 입장에서 이제야 SSH를 직접 사용해보는 것이 부끄러운 일이지만 그래도 이번일을 통해서 SSH가 어떻게 동작하고 어떤 설정을 해야하는지 조금은 와닿는 계기가 되었다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Burp Suite 내장 브라우저 에러]]></title>
            <link>https://velog.io/@ojun-log/Burp-Suite-%EB%82%B4%EC%9E%A5-%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80-%EC%97%90%EB%9F%AC</link>
            <guid>https://velog.io/@ojun-log/Burp-Suite-%EB%82%B4%EC%9E%A5-%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80-%EC%97%90%EB%9F%AC</guid>
            <pubDate>Wed, 29 Jul 2026 11:11:58 GMT</pubDate>
            <description><![CDATA[<p>Burp Suite 내장 브라우저로 실습을 해보려고 켰다가, <code>Burp&#39;s browser failed to start</code>라는 에러 때문에 삽질을 했고, 원인은 못 찾았다. 지금은 우회해서 쓰고 있지만 이것저것 클로드나 구글링을 통해 해결하려한 방법들을 남겨두면 나중에 나든 남이든 도움이 될 것 같아서 기록으로 남긴다.</p>
<h2 id="뭘-하려고-했나">뭘 하려고 했나</h2>
<p>Burp Suite Proxy 탭에서 <code>Open browser</code> 버튼 누르면 내장 Chromium이 켜지면서 프록시 설정이랑 인증서까지 자동으로 잡혀서 바로 트래픽 가로채기 실습을 시작할 수 있어야 정상이다. 근데 버튼 누르자마자 <code>Burp&#39;s browser failed to start</code>라는 팝업만 뜨고 아무것도 안 켜졌다.</p>
<h2 id="1-파일이-깨졌나-싶어서-확인해봄">1. 파일이 깨졌나 싶어서 확인해봄</h2>
<p>Burp에 진단 로그 보는 기능이 있길래 열어봤더니, <code>BROWSER POOL</code> 항목에 <code>Live: N/A, Total: 0</code>이라고 찍혀 있었다. 브라우저가 아예 한 번도 켜진 적이 없다는 뜻.</p>
<p>그래서 Burp 폴더 안에 있는 <code>chrome.exe</code>를 직접 실행해보니 이런 에러가 떴다.</p>
<p><img src="https://velog.velcdn.com/images/ojun-log/post/bf20e27f-1368-45bf-92c6-6cc2fb82b701/image.png" alt=""></p>
<p>클로드에 물어보니, dll 파일 하나가 깨진 것 같았다고한다. 백신 로그도 확인해봤는데 딱히 이 파일을 차단했다는 기록은 없었다. 그냥 다운로드/설치 중에 파일이 어쩌다 손상됐나보다 하고 넘어갔다.</p>
<p><strong>한 일:</strong> burpbrowser 폴더 통째로 삭제하고 Burp 재실행해서 다시 받게 유도함</p>
<p><strong>결과:</strong> 삭제하고 나니까 이번엔 Burp 자체가 안 켜졌다. 스플래시 화면만 반짝하고 사라지는데 작업관리자에도 프로세스가 안 보임. 뭔가 같이 지워지면 안 되는 것까지 지워버린 듯ㅇㅅㅇ</p>
<h2 id="2-아예-밀고-재설치">2. 아예 밀고 재설치</h2>
<p>그냥 처음부터 다시 까는 게 낫겠다 싶어서 Burp를 완전히 삭제하고 공식 사이트에서 새로 받았다.</p>
<p><strong>결과:</strong> 설치는 잘 됐고 Burp 창도 멀쩡히 켜졌다. 근데 브라우저 켜는 순간 또 똑같은 에러. <code>Burp&#39;s browser failed to start</code>.</p>
<p>허허^_^</p>
<h2 id="3-burp-자체-진단-기능으로-다시-확인">3. Burp 자체 진단 기능으로 다시 확인</h2>
<p>에러 팝업에 <code>Run health check</code>라는 버튼이 있길래 눌러봤다. Burp가 스스로 진단해주는 기능이라고 한다. 출력 결과로는 이런 결과가 나왔다.</p>
<p><img src="https://velog.velcdn.com/images/ojun-log/post/34728fd5-f7d1-4e0a-bb29-74dc7da82325/image.png" alt=""></p>
<p>그리고 아래에 이런 메시지가 떴다.</p>
<blockquote>
<p>No dev tools websocket output from local chromium process 13128</p>
</blockquote>
<p>이게 중요한 것으로 보였다. 파일 손상 문제는 이미 해결된 상태였고(재설치했으니까), 크롬 프로세스도 실제로 켜지긴 켜졌다(PID 13128이 존재한다는 거니까). 근데 Burp랑 그 브라우저 사이의 통신(DevTools 프로토콜 웹소켓)이 안 되는 거였다. 프로세스는 살아있는데 대화가 안 되는 상황.</p>
<h2 id="4-로컬-통신을-막을-만한-걸-하나씩-꺼봄">4. 로컬 통신을 막을 만한 걸 하나씩 꺼봄</h2>
<p>프로세스는 뜨는데 통신만 막히는 거면 방화벽이나 가상 네트워크 어댑터 쪽을 의심해볼 만했다.</p>
<ul>
<li><strong>방화벽:</strong> BurpSuite.exe랑 chrome.exe(burpbrowser 안에 있는 거)를 방화벽 허용 목록에 수동으로 추가함 → 안 됨</li>
<li><strong>VMware 가상 네트워크 어댑터:</strong> VMnet1, VMnet8 잠깐 꺼봄 → 안 됨</li>
<li><strong>Burp 관리자 권한 실행 여부:</strong> 혹시 관리자 권한으로 켜서 하위 프로세스랑 권한이 안 맞나 싶었는데 애초에 관리자 권한으로 실행하고 있지도 않았음</li>
<li><strong>별도 백신 프로그램:</strong> V3, 알약 같은 거 설치돼있나 확인함 → 아무것도 없었음</li>
</ul>
<p>이 네 가지를 다 확인했는데도 에러는 그대로였다.</p>
<h2 id="결국-원인이-뭐였는지">결국 원인이 뭐였는지</h2>
<p>모르겠다. <code>No dev tools websocket output</code> 이 문구로 검색해봐도 딱 맞는 사례가 안 나왔다. 흔한 케이스는 아닌 것 같다. 방화벽, 가상 어댑터, 권한, 백신 이 네 가지 유력한 용의자를 다 지웠는데도 남는 게 없어서포기했다.</p>
<h2 id="그래서-어떻게-했나-우회">그래서 어떻게 했나 (우회)</h2>
<p>계속 원인 찾다가는 공부 진도가 안 나갈 것 같아서 그냥 우회하기로 했다. Burp의 핵심 기능(프록시로 트래픽 가로채기, Repeater, Intruder 이런 거)은 내장 브라우저 없어도 똑같이 동작한다고 클로드가 말했다. 그래서 그냥 평소 쓰던 크롬을 수동으로 Burp 프록시에 연결해서 쓰면 되는 거였다.</p>
<ol>
<li>크롬 프록시 설정에서 <code>127.0.0.1:8080</code>(Burp가 기본으로 열어두는 주소)으로 수동 설정</li>
<li><code>http://burp</code> 들어가서 CA 인증서 다운로드</li>
<li>그 인증서를 크롬 신뢰 저장소에 등록</li>
<li>아무 사이트나 들어가봤는데 인증서 경고도 안 뜨고, Burp의 HTTP history에 요청이 실시간으로 잘 찍혔다</li>
</ol>
<h2 id="느낀-점">느낀 점</h2>
<ul>
<li>같은 에러 문구(<code>failed to start</code>)라도 상황마다 원인 레이어가 완전히 다를 수 있다. 처음엔 파일 손상, 나중엔 통신 문제로 원인 자체가 바뀌었다.</li>
<li>Burp에 <code>Run health check</code> 같은 자체 진단 기능이 있다는 걸 이번에 처음 알았다. 다음부턴 무작정 추측하지 말고 이런 기능부터 먼저 써봐야겠다.</li>
<li>모든 흔한 원인을 다 지워봤다고 정답이 나오는 건 아니었다. 이럴 땐 완벽하게 원인을 찾는 것보다 일단 공부를 계속할 수 있는 우회로를 찾는 게 더 현실적인 선택인 것 같다!</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[리눅스 기초]]></title>
            <link>https://velog.io/@ojun-log/%EB%A6%AC%EB%88%85%EC%8A%A4-%EA%B8%B0%EC%B4%88</link>
            <guid>https://velog.io/@ojun-log/%EB%A6%AC%EB%88%85%EC%8A%A4-%EA%B8%B0%EC%B4%88</guid>
            <pubDate>Sun, 10 May 2026 16:39:59 GMT</pubDate>
            <description><![CDATA[<h2 id="배운-내용">배운 내용</h2>
<h2 id="막혔던-부분">막혔던 부분</h2>
<h2 id="해결-방법">해결 방법</h2>
<h2 id="정리">정리</h2>
]]></description>
        </item>
    </channel>
</rss>