Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

걸음마부터 달리기

[24/12/2] 학교 네트워크 멋대로 뜯어보기 본문

카테고리 없음

[24/12/2] 학교 네트워크 멋대로 뜯어보기

성추 2024. 12. 2. 17:06

학교 동아리방 내 서버가 뚫려있는걸 보고 이걸 어케 했나 궁금해서 작성한다.

머릿속에서 전공때 들은 파편화된 지식을 정리했다.

 

사건발생: 

서버컴퓨터는 준비되어있고 학교 동아리방에 서버를 설치하는 과정

공인IP 할당해달라고 했다가 과사에서 개털림

다음날 와보니 터널링 + 포트포워딩을 이용하여 일본 프록시서버를 통해 서버가 뚫려있음. (여기서부터 어떻게 뚫은건지 궁금해졌음)

 

학교 네트워크가 어떻게 되어있는지 먼저 알아야해서 학교 정보전산원 사이트에 들어가봄. 

보면 L3스위치(라우터)가 37개인데 학교 건물은 39개임. 39개 중 플랜트나 이거저거 굳이 필요 없는곳 제외하면 딱 건물당 한개씩 라우터 할당을 받은거같음.

실제 과기대 대략적인 구성

위 첫번째 사진은 타대학 중 내가 생각한 우리학교와 유사한 구조인거 같아서 가져와봤다.(거의 모든 캠퍼스가 이런 구조로 되어있는거 같다.)

건물당 하나씩 라우터 주고 그 라우터들을 백본에서 모은다. 문제는 이게 백본 라우터도 있고 백본 스위치도 있어서 만약 그냥 최상위 라우터에서 들어오기만 하면 그때부터는 백본 스위치에 의해 경로를 설정하는것인가? 하는 생각도 들었는데

학교 내부에서 tracert 쳐보니 그건 아니었다. tracert는 홉, 즉 3계층을 지나가는지 아닌지 알려주기에 저 흐름은 이와 같다.

1) 동아리 방 내부의 공유기로부터 시작(192.168.01)

2) 동방에서 나온 L2선에 연결한 L3 Iptime 거침.

3) 동방 사설 네트워크 타고 미래관 라우터(3번째 홉) 로 들림. (찾아보니 요청시간 만료되었다고 뜨는건 해당 라우터에서 ICMP 추적을 허용하지 않으면 뜬다고 하더라.)

4) 마찬가지로 미래관에서 백본 스위치를 지난다고 예상됨. (확실하지는 않음)

5) 4번째 홉인 백본 스위치를 지나서 203.246.85.254의 ISP한테 받은 공인 ip 라우터를 지나감.

6) 이후부터는 외부 네트워크와 접속...

 

그래서 학교에서 공인IP 받은 최상단 라우터가 하나 있고 그 아래에 백본으로 연결되어 각각 건물에 하나씩 라우터를 준거 같았음. 대충 뇌피셜 모식도는 이거임.

 

실제로 공인IP 할당된건 최상단 라우터밖에 없고 나머지는 전부 사설IP를 계층적으로 쌓은거라고 유추할 수 있음. 왜냐하면 서로 다른 건물이어도 학교 내부 망에만 있으면 통신이 가능하기 때문임.

따라서 각각의 건물 라우터에서 라우팅 테이블을 확인하고 없다면 상위 라우터로 보낼거임.

이런식으로

상위 라우터도 이제 라우팅 테이블 뒤져서 있으면 해당 사설망으로 보내주고 아니면 다시 상위 라우터로 보내는 식의 반복을 통해 서로 다른 건물이어도 내부 망에 연결만 되어있으면 통신이 되는 구조일듯...

 

공인IP 블록 중 남은건 저런 서버한테 주고 대학원생, 교수한테 할당하는 걸로 들었음.

이런 좀 스케일 큰 것들에 공인 IP 주겠지

 

그러면 어떻게 내부 사설망에 위치해있는 동방 서버를 외부서버와 뚫었는가?

기본적으로 내부에서 외부로 나갈때와 외부에서 내부로 들어올때는 상황이 다르다. NAT 때문에...

DHCP가 사설 유동 ip를 자신의 네트워크 호스트들한테 분배하고 NAT는 이런 사설 IP를 이용하여 외부와 통신하게 공인 IP로 바꿔준다. 이때 NAT 테이블이 있는데 (Static NAT, PAT, Dynamic NAT 등등) 모두 동일하게 일단 내부에서 나가는걸 보고 NAT가 공유기인 경우 자신의 공인IP로 바꿔주면서 테이블에 작성한다. 그러면 사설IP로 출발지가 세팅되어 있던게 나가면서 공유기의 공인 IP로 나가게 되고, 응답받게 되면 공인 IP로 , 즉 호스트가 아닌 공유기를 도착지로 오게 되고 이걸 테이블에서 보고 해당 사설 IP로 도착지를 바꿔서 호스트에게 공유기가 전달한다.

 

그런데 내부에서 요청이 없는 상태에서 그냥 Request가 내부 망으로 들어올때는 공인 IP를 받지 않고 사설 IP를 쓴다면 포트포워딩을 해줘야한다. 

 

1) 단순 포트포워딩을 한다.

포트포워딩은 어떤 해당 라우터에 Ip주소와 포트번호의 요청이 오면 세팅한 Ip주소와 포트번호로 전달한다. 근데 문제는 포트포워딩 세팅은 내가 직접 라우터에서 작업을 해야되는데 학교 라우터에 접근이 불가능하다. 빠꾸

 

2) SSH Reverse Tunneling 

A====B==(==C 의 네트워크 구조가 있다고 생각해보자. B는 공인 IP를 가지고 있다.

이럴경우 A는 C로의 접근이 불가능하지만 C로부터 A의 접근은 가능하다.

이걸 이용해서 공인IP를 가지는 B에 C로부터 reverse Tunnel을 뚫어서 연결을 맺어놓고 A가 B로 접근하여 A가 B를 우회하여 C로 접근하게 만드는것이다. 

이것도 괜찮은 방법이지만 현재 사설 네트워크 안에 있는 서버에 바로 접근하는것도 아니고 공인 IP를 가지는 서버 하나를 준비해야되는데 이럴거면 애초부터 C서버에 공인IP 받아서 그걸 서버로 쓰지 굳이?

이미 공인 IP를 가지는 내부 서버가 하나 있을 경우 좋을거같다. 

 

https://iam.jesse.kim/study/ubuntu/ssh-reverse-tunneling

 

3) Ngrok

기본적인 원리는 2번과 같아보인다. 결국 내부 망의 호스트가 역방향으로 연결을 열어서 외부로부터의 접근을 허용하게 하면 된다. 문제는 2번의 경우 이 외부 접근을 받아줄 또다른 공인IP 서버가 필요했는데 Ngrok은 이 고민을 없애준다.

 

Ngrok은 웹훅을 이용하여 역방향 API, 즉 클라이언트가 서버를 먼저 호출해야만 응답을 받을수 있는 것과 달리 서버에 이벤트가 생기면 서버가 클라이언트를 호출하는 역방향이다. 

 

https://frtt0608.tistory.com/143

 

웹훅[Webhook]이란 무엇일까?

✅ Webhook 웹훅은 웹페이지 or 웹앱에서 발생하는 특정 행동(이벤트)들을 커스텀 Callback으로 변환해주는 방법으로 이러한 행동 정보들을 실시간으로 제공하는데 사용됩니다. 보통 REST API로 구축된

frtt0608.tistory.com

따라서 내부 망의 서버에서 클라이언트로서 Ngrok의 프록시 서버와 연결을 맺는다. 이러면 ngrok 내에서 내부망에 접근 가능한 ngrok 도메인의 공용 URL을 주는데, 이 공용 URL로 외부 클라이언트가 요청을 보내면 프록시 서버가 웹훅을 통해 ngrok 서버쪽에서 클라이언트(내부망 서버)쪽으로 보내게 된다.

https://skhan.tistory.com/26

 

Ngrok 플랫폼 사용 후기

이번 포스팅 글은 Ngrok에 대한 포스팅글을 내부 침투가 가능한지의 대한 관점에서 글을 정리하였다. #Ngrok이란? ngrok 플랫폼은 NAT와 방화벽 뒤에있는 사내 로컬 서버를 안전한 터널을 통해 공개

skhan.tistory.com

 

오... 이러면 내가 내부 망 라우터쪽에서 포트포워딩 작업이나 공인IP를 따로 만들 필요도 없겠다!

 

다음 글에서는 Ngrok과 단순 라우터의 포트포워딩을 이용하여 서버 구축해볼려고 한다.