반응형

 

소스코드 분석과 바이너리 분석이란 무엇인가요?

일반적으로 우리가 프로그래밍 언어를 공부하거나 해킹, 보안 등을 공부하다 보면 자주 접하게 되는 용어 중 하나가 분석입니다.

이때 말하는 분석이라는 단어는 여러 가지 의미를 내포하고 있지만,

주로 어떤 프로그램 코드나 데이터 구조 등을 해석하거나 이해하는 행위를 말합니다.

그리고 이러한 분석 작업을 수행하기 위해서는 해당 분야에 대한 전문 지식이 요구됩니다.

즉, IT 업계에 종사하시는 분들에게 분석 능력은 필수적인 요소라고 할 수 있습니다.

크게 분석 방법에는 소스코드 분석과 바이너리 분석이 존재하는데

이번 글에서 위 두 분석 방법에대해 설명드리고자 합니다.


 

Ai 인공지능 ChatGPT에게 소스코드 분석과 바이너리 분석이 어떤 것인지 질의를 해보도록 합시다.

소스코드 분석

  • 정의: 소프트웨어의 원본 코드를 검토하고 분석하는 과정입니다.
  • 목적: 코드의 이해, 품질 향상, 효율성 증가, 보안 강화.
  • 한계: 제3자 라이브러리나 배포 단계에서의 취약점 탐지에 한계가 있습니다.

바이너리 분석

  • 정의: 컴파일된 소프트웨어의 바이너리 형태를 검토하고 분석하는 과정입니다.
  • 목적: 소스 코드에 의존하지 않고 실행 가능한 프로그램의 보안 문제 및 취약점 찾기.
  • 범위: 소프트웨어 전체, 운영 체제 취약점, 바이너리 레벨 하드웨어 구성 등을 포함합니다.

 

바이너리 분석과 소스코드 분석은 뭐가 다른건가요?


소스코드 분석

소스코드 분석은 소프트웨어 원본 코드를 검토하고 분석하는 과정으로, 개발자가 작성한 코드의 이해, 품질 향상, 효율성 향상 및 보안 목적으로 사용됩니다. 코드 기능, 비즈니스 로직, 변수 및 데이터 사용, 조건 및 반복문 등 전체 코드 구조를 이해하는데 도움이 됩니다.

탐지 범위

소스코드 분석은 원본 코드에 대한 보안 위협, 코드 품질 문제 및 코드 최적화를 찾는 데 도움이 됩니다. 그러나 제 3자 라이브러리 및 배포 단계에서 발생하는 취약점은 이러한 분석으로 찾기 어렵습니다.

 

바이너리 분석

바이너리 분석은 컴파일된 소프트웨어의 바이너리 형태(즉, 기계에서 실행되는 형태)를 검토하고 분석하는 과정입니다. 소스 코드에 의존하지 않고, 컴파일된 프로그램에서 직접 작동 원리, 깨지지 코드, 취약점 및 보안 문제를 찾을 수 있습니다.

 

탐지 범위

바이너리 분석은 컴파일된 프로그램 전체를 포함하여 문제를 찾기 위해 소프트웨어의 모든 부분을 다룹니다. 운영 체제의 취약점, 바이너리 레벨 하드웨어 구성 및 프레임워크와 스크립트와 같은 컴파일 후 추가되는 요소의 보안 위협을 감지할 수 있습니다.

소스코드 분석을 하는 이유


보통 대부분의 프로젝트 진행 시 설계 단계에서부터 소스코드 분석을 고려하게 됩니다.

왜냐하면 소스코드 분석을 통해서 문제 발생 지점을 미리 예측하고 효율적인 해결책을 제시할 수 있기 때문입니다.

예를 들어 다음과 같은 상황을 가정해봅시다.

“A라는 클래스 모듈안에 B라는 메서드가 있고, A클래스 객체 생성 후 B메서드를 호출하면 C라는 결과 값이 반환된다.”

class A:
    def B(self):
        return "C"

# A 클래스의 객체 생성
a_instance = A()

# B 메소드 호출 후 결과값 저장
result = a_instance.B()

# 결과값 출력
print(result)  # 출력: C

만약 위와 같은 형태의 간단한 코드로 구성된 프로그램이라면 누구나 쉽게 수정해서 원하는 결과를 얻을 수 있습니다.

하지만 만약 “A라는 클래스 모듈안에 B라는 메서드가 있고, A클래스 객체 생성 후 B메서드를 호출하면 C라는 결과 값이 반환된다.”라는 문장이 수십 개 이상 반복되는 복잡한 알고리즘을 가진 프로그램이라면 어떨까요?

이럴 경우 각 메소드마다 일일이 주석을 달아주는 것은 매우 비효율적이며, 자칫 잘못하면 오류가 발생할 확률이 높습니다.

그렇기 때문에 처음부터 모든 메서드에 대한 자세한 주석을 달기보다는

전체적인 흐름을 파악하며 큰 그림을 그리는 것이 좋습니다.

이를 위해 우선 현재 상태를 점검해야 하는데, 이때 유용하게 사용될 수 있는 도구가 바로 소스코드 분석입니다.

 

바이너리 분석을 하는 이유

 

바이너리 분석은 소프트웨어 개발 및 보안 분야에서 매우 중요한 역할을 합니다. 이는 특히 소스코드가 직접적으로 사용할 수 없거나, 컴파일 후의 프로그램 동작을 이해하고 검증해야 할 때 필요합니다.

 

바이너리 분석은 컴파일된, 즉 실행 가능한 형태의 프로그램을 분석하는 과정입니다. 이 과정은 특히 다음과 같은 상황에서 중요합니다

소스코드 접근 불가: 때때로, 특히 공개되지 않은 소프트웨어나 써드파티 제품을 다룰 때, 소스코드에 접근할 수 없습니다. 이럴 때 바이너리 분석을 통해 소프트웨어의 작동 방식을 이해하고 문제점을 찾을 수 있습니다.
컴파일 과정 중 문제 발견: 컴파일 과정은 소스코드를 실행 가능한 형태로 변환합니다. 이 과정에서 추가적인 최적화나 변경이 일어날 수 있으며, 이로 인해 새로운 취약점이나 버그가 발생할 수 있습니다. 바이너리 분석을 통해 이러한 문제를 탐지할 수 있습니다.
보안 취약점 탐지: 특히 해킹이나 보안 분야에서, 바이너리 분석은 소프트웨어의 보안 취약점을 찾는 데 중요합니다. 컴파일된 프로그램에서 직접적으로 취약점을 찾아내어 공격 가능성을 평가할 수 있습니다.
리버스 엔지니어링: 때때로, 특정 소프트웨어의 기능을 이해하거나 호환성을 확보하기 위해 리버스 엔지니어링이 필요할 수 있습니다. 바이너리 분석은 이 과정에서 핵심적인 역할을 합니다.

앞서 말씀드린 바와 같이 소스코드 분석은 반드시 거쳐야 하는 과정이지만,

그렇다고 해서 소스코드 분석만으로 모든 문제점을 찾아낼 수 있는 것은 아닙니다.

특히 규모가 크고 복잡한 프로그램일수록 소스코드 분석만으로는 한계가 생길 수밖에 없습니다.

그렇다면 어떻게 해야 할까요? 정답은 바로 ‘다른 분석 방법’을 병행하는 것입니다.

대표적인 예가 바로 디버깅입니다.

하지만 이번 시간에는 소스코드 분석과 바이너리 분석에 대해서만 살펴보겠습니다.

물론 둘 다 좋은 분석 방법이지만,

각각의 장단점이 명확하므로 목적에 맞게 적절히 활용한다면 더욱 효과적으로 업무를 수행할 수 있을 것입니다.

우리 모두 안전하고 깨끗한 보안을 이루어갑시다!


궁금하신 사항은 댓글에 남겨주세요

댓글에 남겨주신 내용

추후 정리해서 올려드리겠습니다

구독 신청하시면 업로드 시 알려드릴게요!

-

조금이라도 도움이 되셨다면

공감&댓글 부탁드리겠습니다

감사합니다!

반응형
반응형

인캡슐레이션

오늘은 인캡슐레이션과 디캡슐레이션이 무엇인지 확인해 보는 시간을 가지도록 하겠습니다.

아주 쉽게 설명해드릴테니 아래 검색 결과를 읽다가 포기하지 말아 주세요!

인캡슐레이션과 디캡슐레이션을 인터넷에 검색해 보면 뭐라고 나오는지 한번 찾아볼까요?

 

인캡슐레이션
(Encapsulation)

 

인캡슐레이션은 상위 계층 -> 하위 계층으로 보내는 행위입니다.

네트워킹에서는 데이터 패킷이 전송 계층을 거치면서 헤더나 기타 정보가 추가되어 가는 과정이며,
데이터와 그 데이터를 처리하는 함수를 하나의 단위로 묶는 것을 의미합니다.

이는 주로 객체 지향 프로그래밍에서 볼 수 있는 개념으로,

데이터 구조와 데이터를 처리하는 방법들을 결합하여 데이터의 추상화,

정보 은닉 및 데이터 보호를 달성하는 기법입니다.

이렇게 해서 데이터는 다음 계층으로 넘어갈 준비가 됩니다.

 

계층이 무슨 말인지 잘 모르시겠다면

OSI 7 계층 레이어 글을 읽고 와주세요!

https://jdcyber.tistory.com/11

 

OSi 7계층 모델이란? (개념/이해/설명) TCP/IP Protocol suite

너무 말이 어렵게 느껴지더라도 조급해하지 마세요 그저 설명되어 있는 글을 읽고 아 그렇구나 하고 넘어가시면 됩니다. 하나하나 이해하려고 하면 할 수 없습니다. 시간이 지나며 차차 이해하

jdcyber.tistory.com


디캡슐레이션
(Decapsulation)

 

디캡슐레이션은 상위 계층 -> 하위 계층 즉 반대로 보내는 행위입니다.

마찬가지로 데이터를 전송하기 위해서 프로토콜 정보를 추가하는 패키지 과정이죠

디캡슐레이션은 인캡슐레이션의 반대 과정으로,

데이터 패킷에서 헤더나 추가된 정보를 제거하는 과정을 말합니다.

네트워킹에서는 패킷이 목적지로 전송되는 동안 각 계층에서 필요한 헤더나 정보가 제거되어 원래의 데이터만 남게 됩니다.

객체 지향 프로그래밍에서는 객체 내부의 데이터에 접근하거나 그 데이터를 조작하는 과정을 의미할 수 있습니다.

 

패킷과 헤더에 대해 궁금하시다면

아래 글을 읽어주세요!

https://jdcyber.tistory.com/12

 

패킷(Packet)이란? (쉬운 설명, 구조, 헤더, 인캡슐레이션, 핑, Ping)

패킷 (Packet) 이란 무엇일까요? 패킷은 패키지(package)와 덩어리를 뜻하는 버킷(bucket)의 합성어로 통신망을 통해 전송하기 쉽도록 데이터를 잘게 나눈 전송 단위입니다. 본래 패킷은 소포를 뜻하는

jdcyber.tistory.com


디캡슐레이션

뭐라고 하는 거예요?

 

네 쉽게 설명해 드리겠습니다.

인캡슐레이션 (Encapsulation)
상자에 물건을 넣고 그 위에 라벨을 붙이는 것과 비슷합니다.
프로그래밍에서는 데이터(물건)와 그 데이터를 다루는 기능(라벨)을 상자에 함께 넣는 것을 말해요.
이렇게 함으로써 데이터를 안전하게 보호하고, 필요할 때만 꺼내 쓸 수 있어요.
디캡슐레이션 (Decapsulation)
상자에서 물건을 꺼내는 것과 같습니다.
네트워킹에서는 데이터가 여행하는 동안 각 정거장에서 불필요한 라벨(정보)을 하나씩 제거해요.
결국 목적지에 도착했을 때, 원래의 데이터만 남게 되죠.

 

인캡슐레이션은 데이터를 캡슐화하여 보호하고,

디캡슐레이션은 그 캡슐을 제거하여 데이터에 접근하는 과정입니다.

 

여기서 우리는 프로토콜이라는 개념도 알아갈 필요가 있습니다.

프로토콜

프로토콜
(Protocol)

 

프로토콜은 데이터 전송 규약이라고도 불리는데요
네트워크 환경에서 데이터를 전송할 때 전송 방법을 정의하는 규칙입니다.
인캡슐레이션 디캡슐레이션 역시 데이터를 전송하는 방법이 기 때문에 프로토콜에 의해 만들어집니다.
용도에 따라 프로토콜도 종류가 많은데요

오늘은 프로토콜이 데이터 전송 규약이며 도구구나 정도만 알고 넘어가겠습니다.

조금 자세히 알고 싶으시면 위에 링크 남겨드린 OSI 7 레이어 글을 읽으시면 도움이 되실 거예요!

 


정리

인캡슐레이션은 네트워크 프로토콜 규칙에 따라 데이터를 캡슐화하는 과정이며,
디캡슐레이션은 도착지에서 그 캡슐을 제거해 원본 데이터를 복원하는 과정으로,
이 모든 것이 특정 프로토콜의 지침에 따라 이루어지며,
프로토콜은 컴퓨터나 네트워크 장비들이 서로 정보를 주고받을 때 지켜야 할 규칙이나 절차의 집합입니다.

궁금하신 사항은 댓글에 남겨주세요

댓글에 남겨주신 내용

추후 정리해서 올려드리겠습니다

구독 신청하시면 업로드 시 알려드릴게요!

-

조금이라도 도움이 되셨다면

공감&댓글 부탁드리겠습니다

감사합니다!

반응형
반응형

 

와이어샤크 WhireShark 란?

초창기에는 ' Ethereal '이라는 이름으로 나왔다가

이후 상표 문제로 ' Wireshark ' 바뀌게 되었습니다.

 

와이어 샤크는 네트워크 패킷을 캡처하고 분석하는 패킷을 분석하는 프로그램입니다.

와이어 샤크는 현재 통신 중인, 실제 흘러가고 있는 데이터,

패킷을 캡처하여 데이터의 흐름을 살펴볼때 사용하는 분석 프로그램입니다.

즉, 내가 보내거나 받는 데이터가 케이블을 타고 흘러갈 때

그 내용을 찍어서 분석하고 알아본다는 이야기입니다.

 

패킷이 무엇일까요?

아래 글을 읽어주세요!

https://jdcyber.tistory.com/12

 

패킷(Packet)이란? (쉬운 설명, 구조, 헤더, 인캡슐레이션, 핑, Ping)

패킷 (Packet) 이란 무엇일까요? 패킷은 패키지(package)와 덩어리를 뜻하는 버킷(bucket)의 합성어로 통신망을 통해 전송하기 쉽도록 데이터를 잘게 나눈 전송 단위입니다. ​ 본래 패킷은 소포를 뜻

jdcyber.tistory.com

주로 네트워크 문제를 조사하거나

좀처럼 원인을 찾기 힘든 네트워크에 대한 트러블

(장애)을 해결할 때 사용됩니다.

 

강력하고 쉬운 사용법 때문에 해킹뿐만 아니라

보안 취약점 분석, 보안 컨설팅, 개인정보 영향 평가 등

여러 분야에서 폭넓게 사용되고 있으며 특히 교육용으로 널리 사용되고 있습니다.


주요기능

 

네트워크 인터페이스 RAW 패킷 캡처
패킷 내용 분석 가능 (상세 표시)
캡처 데이터를 열거나 저장
패킷 필터링 혹은 검색
다양한 통계 생성 가능
플러그인 제작하여 기능 확장 가능
USB, 블루투스 등의 프로토콜 분석 가능
Python 이용하여 독자적 분석기 제작 가능

응? 뭐라고요?

 

 

PC로 홈페이지를 보거나 이메일을 보낼 때에

전송되는 데이터는 실제로는 LAN 케이블을 통해 전기 신호 형태로 바뀌어 흐르게 됩니다.

 

와이어 샤크 (LAN 분석기)는 LAN 케이블을 지나는

전기 신호를 데이터를 패킷 형태로 가져와서 패킷의 의미를 조사할 수 있기 때문에,

나의 컴퓨터와 네트워크 사이 케이블 속을 지나다니는 내용/정보 들을 살펴보고 직접 확인해 있습니다.

 

LAN 케이블을 지나는 전기신호를 데이터 형태로 가져오는 것을 패킷 캡처라고 하고,

가져온 패킷의 의미를 조사하는 것은 덤프 분석이라고 합니다


와이어샤크 설치

 

아래 사이트에 접속하신 후

stable release에서 운영체제에 맞는 것을 설치합니다.

https://www.wireshark.org/download.html

 

Wireshark · Download

Wireshark: The world's most popular network protocol analyzer

www.wireshark.org

 

 

다음 쭉 눌러서 설치하시는데

아래 체크박스는 꼭 해주세요

pcap를 이용해서 패킷을 캡쳐하기 때문에 반드시 설치해야합니다.

(WinPcap 설치해주세요)

 

와이어 샤크의 필터 검색 방법 및 세부 내용은

다음 글에서 연습해 보도록 하겠습니다.

https://jdcyber.tistory.com/9

 

와이어샤크 (Whireshark) 사용법#2 (쉬운 설명, 필터, 캡처, 연산자)

와이어샤크란? 오늘은 와이어샤크 사용법에 대해 간단히 알아보겠습니다. 그전에 혹시 와이어샤크에 대해 모르시는 분들은 ​ 전에 적어 두었던 개념과 설치법도 함께 적어놨으니 읽어보고 와

jdcyber.tistory.com


궁금하신 사항은 댓글에 남겨주세요

댓글에 남겨주신 내용

추후 정리해서 올려드리겠습니다

구독 신청하시면 업로드 시 알려드릴게요!

-

조금이라도 도움이 되셨다면

공감&댓글 부탁드리겠습니다

감사합니다!

반응형

+ Recent posts