반응형

 

앞서 2가지 프로그래밍 언어를 소개하는 글을 통해서

어떤 프로그래밍 언어를 배워야 하는지

그 프로그래밍 언어는 어떤 것에 특화가 되어있고

목표로 잡은 것이 어떤 것이냐에 따라 달라진다고 말씀드렸습니다.

 

(앞서 2가지 글 보러 가기)

https://jdcyber.tistory.com/15

 

프로그래밍 언어 어떤 걸 먼저 배워야할까? (쉬운 설명, 특징, 목적, 파이썬, 자바, 자바 스크립트

수많은 프로그래밍 언어 도대체 뭘 먼저 배워야 해? 개발을 처음 배우거나 보안을 배우거나 iT업계로 들어올 때 수많은 컴퓨터 언어를 보고 멘붕이 오실 겁니다. 저걸 다 해야 하나..? 어떤 언어

jdcyber.tistory.com

" 아직 저는 무엇을 해야 할지 잘 모르겠어요,
마냥 개발자가 되고 싶은데 목표는 나중에 세울래요.
어떤 걸 가장 먼저 배워야 할까요?"

 

배움의 순서는 없고 정답은 없지만

앞서 걸어간 선배들의 길을 취합해 보고 가장 합리적이고 빠른 길은 무엇일까요?

그래서 준비했습니다.

아무것도 모르겠다면 아래 순서대로 배워라!

(배움의 순서에 따라 써 내려갔기에 각 카테고리 별 설명이 자세하지 않을 수 있습니다.)

 


 

HTML
(HyperText Markup Language)

기본 중의 기본

 

HTML은 모든 방면에서 필수적으로 쓰이는 배우기 쉬운 난이도에 속합니다.

웹 페이지를 만들고 구조화하는 데 사용되는 표준 마크업 언어이며

웹 페이지의 콘텐츠와 구조를 정의하는 데 사용되고

웹 브라우저에 의해 해석되어 사용자에게 시각적으로 표시됩니다.

<!DOCTYPE html>
<html>
  <head>
    <title>Page Title</title>
  </head>
  <body>
    <h1>My First Heading</h1>
    <p>My first paragraph.</p>
  </body>
</html>

(위와 같은 기본 구조를 가지고 있습니다.)

HTML은 웹 개발의 기초이며, 웹 페이지의 콘텐츠와 구조를 정의하는 데

필수적인 역할을 하므로 꼭 배워두셔야 합니다.


 

CSS
(Cascading Style Sheets)

 

 

CSS를 활용하면 만들어둔 웹 페이지를  아름답게 꾸밀 수 있습니다.

말인즉슨 HTML이나 XML 문서의 스타일을 지정하는 데 사용되는 스타일 시트 언어입니다.

웹 개발에서 CSS는 웹 페이지의 레이아웃, 색상, 글꼴 등을 조절하여

시각적인 표현을 개선하는 역할을 합니다.

CSS는 웹 페이지의 콘텐츠(HTML)와 디자인을 분리함으로써,

웹 개발자와 디자이너가 콘텐츠 구조에 영향을 주지 않고

시각적 스타일을 효율적으로 조절할 수 있게 해 줍니다.

CSS는 웹 개발에서 필수적인 기술 중 하나로,

HTML과 함께 사용되어 사용자에게 보다 매력적이고

기능적인 웹사이트를 제공하는 데 중요한 역할을 합니다

 

쉽게 얘기하자면

HTML로만 꾸민 웹페이지는 굉장히 투박하고 아무런 꾸밈이 없습니다.

이런 맨 얼굴에 화장을 해주는 것이 CSS입니다.

하지만 HTML과 CSS를 배웠다고 해서 이상적인 웹페이지를 만들 있는 것은 아닙니다.


Javascript

 

HTML + CSS로 이쁘게 생긴 사이트를 만들었다면 겉만 번지르르한 조금은 멍청한 웹페이지가 만들어졌을 겁니다.

이제 마우스로 클릭하여 움직이거나 현재 위치한 곳을 표시해 주거나 사진을 찍는 등의 기능이 들어간

인터랙티브 한 웹사이트로 발전하기 위해서 자바스크립트가 필요하죠
JavaScript는 웹 개발에서 매우 중요한 역할을 하며, 웹 기술의 발전과 함께 지속적으로 진화하고 있습니다.

그것의 유연성과 광범위한 사용으로 인해, 현대 웹 개발의 핵심 언어 중 하나로 자리 잡았습니다.

브라우저와 소통하는 언어인 자바스크립트는 꼭 배워야 합니다.

 

여기서 자바스크립트를 엄청 전문적으로 하라는 말은 아닙니다.

어느 정도 기본만 숙지하고 다음으로 넘어가셔도 됩니다.


 

Node JS

 

이제 우리는 자바스크립트를 웹페이지 안에서

브라우저를 통해서만 활용하는 것이 아니라 외부에서도 활용해 봐야 합니다.

이때 필요한 것이 바로 NodeJS

 

NodeJS를 잘 활용한다면 우리는 자바스크립트를 이용하여 웹 브라우저에서 벗어나

웹 서버를 만들 수 있고 파일을 생성할 수 있으며

데이터베이스와 통신하고 암호를 보호하고 쿠키를 제공할 수 있습니다.

또 실시간 애플리케이션을 구축할 수 있죠.

이러한 활동을 할 수 있는 곳이 바로 프레임워크라고 합니다.

Node.js는 그것의 효율성, 확장성 및 JavaScript와의 호환성으로 인해,

특히 웹 애플리케이션과 API 서버를 개발하는 데 널리 사용됩니다.

또한, JavaScript 개발자가 서버 측 프로그래밍에 쉽게 접근할 수 있게 하여,

풀스택 개발의 장벽을 낮추는 데 기여했습니다.


 

Express
(Express.js)

 

 

Express.js, 일반적으로 Express라고 불리는 이 프레임워크는

Node.js를 위한 가장 인기 있는 웹 애플리케이션 프레임워크 중 하나입니다.

Express는 웹 애플리케이션과 API를 빌드하는 데 사용되며,

Node.js의 핵심 기능을 확장하여 더 강력하고 유연한 웹 애플리케이션 개발을 가능하게 합니다.


Koa

 

 

이후 Koa를 한번 살펴볼 필요가 있습니다.

갑자기 koa는 들어본 적도 없는데요? 하실 수도 있습니다.

하지만 koa 웹 프레임워크를 주 프레임워크로 채택한 회사도 꽤 많이 있으며,

Express 제작자가 만든 koa는 Express를 하실 줄 안다면

 

배우는데 1시간 밖에 걸리지 않습니다.

1시간 만에 기술 능력에 한 줄 추가되는데 안 할 이유가 없겠죠

 

여기까지 오셨다면

데이터베이스를 구축해야 때가 오셨을 겁니다.


우선적으로 데이터베이스의 기본적인 개념과 원리를 학습합니다.

이는 데이터베이스가 어떻게 데이터를 저장, 검색, 업데이트, 삭제하는지 공부하신 후

관계형 데이터베이스 (SQL)을 학습하기 시작합니다.


 

SQL
(
Structured Query Language)


 

 

데이터베이스 관리 시스템에서 데이터를 저장, 검색, 수정 및 삭제하기 위해 사용되는 표준 프로그래밍 언어입니다.

관계형 데이터베이스 관리 시스템(RDBMS)에서 가장 널리 사용되는 언어로,

데이터베이스 스키마 생성 및 수정, 데이터 삽입, 업데이트, 삭제, 조회 등 다양한 작업을 수행합니다.

이곳에서 바로 많이 들어보셨을 Selct, Insert, 인덱싱, 쿼리 등을 배우시게됩니다.

SQL 데이터베이스 관리 조작에 필수적인 언어로,

관계형 데이터베이스를 사용하는 거의 모든 형태의 애플리케이션 개발에서 중요한 역할을 합니다.

데이터베이스와 상호 작용하는 필요한 강력한 기능을 제공하며,

데이터 기반 의사결정과 시스템 통합에 필수적인 도구입니다.


MySQL

 

MySQL 세계에서 가장 인기 있는

오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS) 하나입니다.

MySQL SQL (Structured Query Language) 사용하여 데이터를 관리하며,

다양한 운영 체제에서 사용할 있습니다.

기반 애플리케이션, 데이터 웨어하우징, e-commerce,

로깅 애플리케이션 다양한 분야에서 널리 사용됩니다.

MySQL 개발, 특히 PHP 함께

LAMP (Linux, Apache, MySQL, PHP/Python/Perl) 스택의 일부로서 매우 인기가 있습니다.

또한, 기업 환경에서도 성능, 확장성 신뢰성 때문에 널리 사용됩니다.

MySQL 소규모 프로젝트부터 대규모 엔터프라이즈 애플리케이션까지

다양한 요구 사항을 충족시킬 있는 유연한 데이터베이스 솔루션을 제공합니다.


난 관계형 데이터베이스가 싫다

Mysql이 싫다! 하시는 분들은 Nosql인 MongoDB를 사용하시면 됩니다.


 

mongoDB

 

 

MongoDB 고성능, 고가용성, 쉬운 확장성을 제공하는 오픈 소스 NoSQL 데이터베이스입니다.

전통적인 테이블 기반의 관계형 데이터베이스 시스템과 달리,

MongoDB 유연한 문서 지향(Document-Oriented) 모델을 사용합니다.

모델은 JSON 유사한 BSON 형식을 사용하여 데이터를 저장하며,

이로 인해 데이터 구조가 다양하고 변경이 자주 일어나는 애플리케이션에 적합합니다.

MongoDB 특히 대용량 데이터 처리, 실시간 분석, 모바일 소셜 애플리케이션,

콘텐츠 관리, IoT 등의 분야에서 강점을 가집니다. 데이터 구조의 변화가 잦거나,

데이터의 다양성과 복잡성이 높은 애플리케이션에 특히 적합합니다.

MongoDB는 SQL보다 훨씬 배우기 쉽습니다.


그런데
브라우저에서 HTML, CSS, JS를 배워보고

Backend에서 NodeJS를 학습했는데,
Javascript와 NodeJS가 너무 지루하고
자신에게 맞지 않는다고 생각이 들면
어떻게 해야 할까요?

 

Python

 

그때는 파이썬 (Python)을 배우시면 됩니다.

Life is too short, You need Python이라는 명언이 있죠

Python 고수준의 인터프리터 언어로,

간결하고 읽기 쉬운 코드를 통해 효율적인 프로그래밍을 가능하게 하는 프로그래밍 언어입니다.

Guido van Rossum 의해 1991년에 처음 발표되었으며,

다양한 프로그래밍 패러다임을 지원합니다.

Python 오픈 소스이며, 강력한 커뮤니티의 지원을 받고 있습니다.

Python 유연성, 확장성 개발자 친화적인 특성으로 인해,

세계적으로 많은 개발자와 기업들에게 사랑받고 있습니다.

초보자부터 전문가까지 다양한 수준의 프로그래머들이 사용할 있는

범용적이고 강력한 프로그래밍 언어입니다.

 

아래 파이썬 독학 시리즈를 연재중이니 확인해보세요!

https://jdcyber.tistory.com/14

 

파이썬 독학 #1 파이썬 (Python)이란? 설치 (쉬운 설명, 정의, IDLE, IDE, 특징, M1)

파이썬 독학 시리즈 파이썬 독학 #1 파이썬이란? (설치, 특징) 파이썬 (Python)이란 무엇인가? 'Life is too short, You need python.' 인생은 너무 짧으니 파이썬이 필요해 ​ 컴퓨터와 애플리케이션, 모든 전

jdcyber.tistory.com


파이썬을 배운 이후에는 어떻게 노선을 타야 할까요?

자바스크립트에서 NodeJS가 있었다면 파이썬에겐 Flask 있습니다.


Flask

Flask Python 기반의 가벼운 프레임워크입니다.
Armin Ronacher
Werkzeug Jinja2 라이브러리를 기반으로 만들었으며,

"마이크로" 프레임워크로 분류됩니다.

Flask "마이크로" 간단하고 핵심적인 기능만을 제공한다는 의미로,

Flask 자체는 최소한의 기능만을 제공하지만,
필요에 따라 다양한 확장 기능을 추가하여 사용할 있습니다.

Flask 간단한 개인 프로젝트부터 복잡한 기업 애플리케이션에 이르기까지

다양한 애플리케이션 개발에 적합합니다.

가벼움, 확장성, 그리고 Python 강력함으로

많은 개발자들에게 인기 있는 선택지가 되고 있습니다.

Flask를 활용하시다가 조금 더 심화된 많은 기능을 담은 프레임 워크에 대한 필요성이 느껴지신다면

그때 배우셔야 할 것은 바로


DJango

 

Django는 Python으로 작성된 고수준의 웹 프레임워크로,

빠른 개발과 깔끔하고 실용적인 디자인을 목표로 합니다.

Django는 "배터리 포함(batteries-included)" 접근 방식을 채택하여,

웹 애플리케이션 개발에 필요한 대부분의 기능을 기본적으로 제공합니다.

이러한 접근 방식은 개발자가 웹 애플리케이션의 핵심 기능 개발에 집중할 수 있게 해 주며,

개발 시간을 크게 단축시킵니다.

Django 대규모 애플리케이션 개발에 적합한 프레임워크로,

강력한 기능과 높은 수준의 추상화로 인해 많은 기업과 개발자들에게 인기가 높습니다.

뉴스 사이트, 소셜 네트워크, 콘텐츠 관리 시스템

다양한 종류의 웹사이트를 효율적으로 구축할 있습니다.


위에 순서대로 공부하시다 보면 중간에
파이썬과 자바스크립트
길로 가 나누어지셨을 텐데요
이 두 개의 구분이 사라지는 시간이 오게 됩니다.
바로 React를 배우게 된다면 말이죠

React

 

 

React (또는 React.js 또는 ReactJS라고도 ) 사용자 인터페이스를 구축하기 위한

JavaScript 라이브러리입니다.

Facebook에서 개발되었으며, 대규모, 고성능의 애플리케이션에서 데이터가 변경될

효율적으로 업데이트하고 렌더링하는 사용됩니다.

React 주로 싱글 페이지 애플리케이션(SPA) 레이어를 구축하는 사용됩니다.

React 동적인 애플리케이션 개발에 매우 효과적이며,

Facebook, Instagram, Airbnb 같은 많은 유명한 웹사이트와 앱에 사용됩니다.

그것의 유연성과 효율성으로 인해 세계적으로 널리 사용되는 프론트엔드 라이브러리 하나입니다.


반면에 백엔드에 특화되어 더욱 배워보고 싶으시다면 Docker를 배워야 할 시간입니다.


Docker

 

Docker는 컨테이너화를 통해 애플리케이션을 개발,

배포 및 실행하기 위한 오픈 소스 플랫폼입니다.

컨테이너화는 애플리케이션과 그 필요한 모든 의존성을 컨테이너라는 격리된 환경에 패키징 하는 것을 말합니다.

이는 애플리케이션이 다양한 컴퓨팅 환경에서 일관되게 동작할 수 있게 해 줍니다.

Docker는 개발자 및 운영 팀 사이의 협업을 강화하며,

애플리케이션의 배포와 확장을 용이하게 만들어,

현대적인 소프트웨어 개발 및 운영 방식의 핵심 요소로 자리 잡았습니다.


 

AWS AZURE ORACLE
  • AWS는 다양한 컴퓨팅, 스토리지, 데이터베이스 서비스를 제공하며, 백엔드 개발자가 필요로 하는 확장성, 유연성, 글로벌 인프라를 제공합니다.
  • 특히, AWS의 Lambda(서버리스 컴퓨팅), EC2(탄력적 컴퓨팅), RDS(관계형 데이터베이스 서비스)는 백엔드 개발에 널리 사용됩니다.
  • Azure는 마이크로소프트의 강력한 지원을 받으며, 특히 .NET 개발자에게 적합한 서비스와 통합을 제공합니다.
  • Azure의 Virtual Machines, App Services, Azure SQL Database는 백엔드 개발 및 배포에 필수적인 서비스입니다.
  • Oracle Cloud는 오라클 데이터베이스와의 통합에 특화된 클라우드 서비스를 제공하며, 엔터프라이즈급 애플리케이션에 적합합니다.
  • Oracle Cloud Infrastructure (OCI)는 고성능 컴퓨팅, 스토리지, 네트워킹 서비스를 제공하며, 특히 기업 데이터베이스 관리 및 분석에 강점을 가지고 있습니다.

 

백엔드 개발자가 이 클라우드 서비스들을 공부하고 활용함으로써,

효율적인 개발 환경을 구축하고, 더 넓은 범위의 서비스와 애플리케이션을 개발할 수 있는 능력을 갖출 수 있습니다.


 

정리

 

기본 웹 기술 학습 HTML → CSS → JavaScript 웹 페이지의 구조, 스타일링, 기능 구현
서버 사이드 프로그래밍: JavaScript(Node.js) JavaScript(Node.js) 백엔드 개발 기초, 서버 로직 구현
고급 JavaScript/Node.js 경로 Express.js → SQL → MySQL 백엔드 개발 심화, 데이터베이스 관리
Python 경로 Python → Flask → Django Python을 사용한 웹 개발, 다양한 웹 개발 측면에 초점
클라우드 및 컨테이너 기술 Docker → Kubernetes → AWS → Azure 애플리케이션 컨테이너화, 오케스트레이션, 클라우드 인프라 구축 및 관리
고급 프론트엔드 개발 React 동적인 사용자 인터페이스 구축에 필요한 현대적인 프론트엔드 프레임워크 학습

백엔드 개발 특화 순서 프론트엔드 개발 특화 순서
  1. HTML
  2. CSS
  3. JavaScript
  4. Node.js
  5. Express.js
  6. SQL
  7. MySQL
  8. Docker
  9. Kubernetes
  10. AWS/Azure
  1. HTML
  2. CSS
  3. JavaScript
  4. React
  5. 고급 JavaScript 프레임워크/라이브러리
    (예: Redux, React Router)
  6. 반응형 웹 디자인
  7. 웹 접근성 및 사용성
  8. 프론트엔드 테스팅 도구 (예: Jest, Cypress)

위 로드맵을 기본으로 여러 가지 갈래로 많이 나뉠 수 있습니다.

하나하나 기초부터 올라오시다 보면 지금도 다양하지만 앞으로 더 다양한 프레임워크 언어 등

트렌디한 개발 기술이 나올 것으로 예상됩니다.

공부 열심히 하시고 파이팅 하시길 바랍니다!


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

댓글에 남겨주신 내용

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

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

-

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

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

감사합니다!

반응형
반응형
패킷 (Packet) 이란 무엇일까요?

 

 

패킷은 패키지(package)와

덩어리를 뜻하는 버킷(bucket)의 합성어

통신망을 통해 전송하기 쉽도록 데이터를 잘게 나눈 전송 단위입니다.

 

본래 패킷은 소포를 뜻하는 용어인데

우체국에서 화물을 적당한 덩어리로 나누어 행선지를 표시하여

꼬리표를 붙이는 작업을 데이터 통신에 접목한 용어로 사용하고 있습니다.

 

즉 패킷은 UDP TCP IP 등 모두가 가지고 있는

데이터 조각이라고 이해하시면 편하십니다.

 

Ping 아시나요?

ping google.com
142.251.42.174의 응답: 바이트=32 시간=62ms TTL=116
142.251.42.174의 응답: 바이트=32 시간=62ms TTL=116
142.251.42.174의 응답: 바이트=32 시간=62ms TTL=116
142.251.42.174의 응답: 바이트=32 시간=62ms TTL=116
142.251.42.174에 대한 Ping 통계:
    패킷: 보냄 = 4, 받음 = 4, 손실 = 0 (0% 손실),
왕복 시간 (밀리초):
    최소 = 61ms, 최대 = 65ms, 평균 = 62ms

 

이렇게 저희는 자신의 컴퓨터에서 간단하게 cmd 혹은 터미널을 통해

구글에 ping 요청을 보내서 네트워크가 잘 이어지고 있는지

패킷을 보내고 받음으로써 검증합니다.

이처럼 패킷은 네트워크 간 주고받는 "무언가"입니다.

네트워크에서 그만큼 패킷이라는 개념은 생각보다 매우 중요합니다.

인터넷에서 하는 모든 작업에는 패킷이 사용되기 때문이죠,

인터넷에선 사용자 간 데이터를 주고받을 때 데이터는 패킷으로 전달됩니다.

패킷의 구조

 

그렇다면 패킷은 어떻게 생겼을까요?

 

데이터 부분을 잘게 쪼개서 패킷으로 전송한다

 

네트워크 패킷은 헤더(Header), 페이로드(Payload), 트레일러(Trailer) 세 부분으로 구성됩니다.

 

헤더는

패킷 길이, 프로토콜, 보낸/받는 사람의 IP 주소 등이

포함되며 UDP TCP IP 등 모두가 가지고 있는

데이터의 머리, 즉 중요한 게 담겨있는

데이터의 가장 앞부분이라고이라고 이해하시면 편하십니다.

헤더에는 주로 데이터 형식에 대한 정보나 시간 데이터, 주소 데이터로 구성되어 있고

데이터의 종류에 따라 정리되기 쉽게 규격화해 놓은 데이터입니다.

 

오늘은 패킷이 이런 거구나 하고 대략적으로만

알고 넘어가 주시면 좋을 것 같습니다.

 

패킷의 내용은 데이터로 전송될 때

인캡슐레이션과 디캡슐레이션을 하여전송하게 되는데요

인캡슐 레이션과 디캡슐레이션에 대한 내용이 궁금하시다면

아래 링크를 통해 확인해 주세요

https://jdcyber.tistory.com/28

 

인캡슐레이션? 디캡슐레이션? 데이터 전송하기 (쉬운 설명, 개념, 정의)

오늘은 인캡슐레이션과 디캡슐레이션이 무엇인지 확인해 보는 시간을 가지도록 하겠습니다. 아주 쉽게 설명해드릴테니 아래 검색 결과를 읽다가 포기하지 말아 주세요! 인캡슐레이션과 디캡슐

jdcyber.tistory.com


오늘의 정리

IP가 들어간 데이터는 패킷이라고 부르고 이 패킷은 데이터를 잘게 나눠 소분한 것이다.

패킷의 헤더에는 IP 주소 등 중요한 정보가 담겨있다.

위 정보들을 데이터로 교환할 때는 인캡슐레이션 디캡슐레이션을 한다.


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

댓글에 남겨주신 내용

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

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

-

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

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

감사합니다!

반응형
반응형

너무 말이 어렵게 느껴지더라도 조급해하지 마세요

그저 설명되어 있는 글을 읽고 아 그렇구나 하고 넘어가시면 됩니다.

하나하나 이해하려고 하면 할 수 없습니다.

 

시간이 지나며 차차 이해하시게 될 겁니다.

 

OSI 7 Layer Reference Model

(open system interconnection)

"한국말로 개방형 시스템"

 

OSI 7 계층이란 무엇일까요?

OSI 참조 모델이라고 불리는 이것은

모든 장치나 네트워크 통신장비를 만들고 구성할 때

이것을 보고 만들자라고 약속하고 정해놓은 기본이 되는 표준

 

, 기준인 7개의 레이어입니다.

 

쉽게 말해서 전세계에서 휴대폰 충전기를 만들 때

여러 회사에서 가지각색의 모양을 가진 수많은 충전기를 만들어내는 것이 아니라

라이트닝 단자로 만들자 혹은 C 타입 단자로 만들자라고 약속하고

일정한 모양을 규칙으로 정해놓고 혼선을 없애는 것과 같은 개념입니다.

 

만약 이러한 규칙이나 약속을 정해두지 않는다면 

수 많은 다른 모양의 충전기들이 나오고 수많은 휴대폰들이 다른 잭을 가지고 있게 되고

우리는 서로 충전기를 공유하지 못하고 매번 충전기를 사야 하는 어려움을 겪게 되겠죠??

 

그래서 필요한 것이 기준과 표준이며 네트워크 통신장비를 만들 때

이 OSI 7 계층이 바로 기준이 되었고 이 규칙은 1984년에 국제 표준화기구 (ISO)에서 발표되었습니다.

 

그렇다면 왜 7 계층이라는 단어를 쓰게 되었을까요?

 

(너무 어렵게 생긴 위 사진을 이해하려 하지 마세요)

쉽게 설명드리겠습다.

 

군대에서 상급자가 하급자에게 명령을 내릴 때 가장 아래 병사인 이등병까지

명령이 잘 전달되어야 임무를 수행하겠죠?

7 계층 역시 같은 구조입니다.

 

하지만 순서만 반대로 생각하시면 돼요

맨 아래 1에서부터 상위 6번까지 모든 것이 완벽하게 연결되어야 비로소 7이 동작하게 됩니다.

 

바로 이러한 모습이

완벽한 수직적 모습을 갖추고 있기 때문에 "계층"이라는 단어를 쓰게 되었습니다.

그래서 우리는 이것을 7 계층이라고 합니다.

 

이렇게 OSI 7 계층은 통신이 일어나는 과정을 총 7가지로 구분 지어놓고

단계별로 정의하여 네트워크를 구성하고 데이터의 흐름을 파악할 수 있도록 각각 고유한 형태를 이루고 있습니다.

각 계층은 독립되어 있으며 한 부분에서 문제가 생긴다면

빠르게 문제가 생긴 부분을 파악할 수 있고 그 부분을 보안할 수 있도록 모습이 고안되었습니다.

 

우리는 이미 이걸 이해하고 있을지도 모릅니다.

 

예를 하나 들어보도록 할게요

컴퓨터에서 인터넷이 갑자기 안됩니다.

왜 이러지? 인터넷 문제인가? 하면서 인터넷 선을 뽑았다 다시 꽂았다 하면서 확인하잖아요?

우리는 이미 OSI 7 계층에서의 3단계 네트워크 단계를 이해하고 있는 겁니다.

만약 접속이 문제가 아니라면 아래 물리계층 1단계 데이터 계층 2단계도 문제가 없는 것이니

4번 전송 계층부터 문제점을 확인해 나아가면 됩니다.

 

이해가 좀 되시나요?

 

오늘 이 글에서는 아래 내용만 기억하시고

넘어가시면 좋을 같습니다.

1. 모든 장치나 네트워크 통신장비를 만들고 구성할 때 기준으로 약속하고
모습을 정해놓은 7가지 약속이 있고 우리는 이걸 OSI 7계층으로 부르고 있다.


2. 7계층이라고 부르는 이유는 수직적으로 운용되기 때문이다.
(1이 되어야 2가 되고 모든 것이 순차적으로 완료되어야 7이 동작한다.)

3. 7계층은 각각 독립된 형태를 유지하고 있어 문제가 발생하면 파악도 빠르고 해결도 빠르다.

 

네트워크를 준비하시는 분들은 CCNA 시험에 대해서 궁금하실 것 같은데요

아래 자세히 설명해놨으니 참고해주시기 바랍니다.

https://jdcyber.tistory.com/47

 

CCNA란 무엇일까요? (소개, 시험, 덤프, 네트워크)

​ CCNA (Cisco Certified Network Associate)란 무엇일까요? CCNA는 네트워크 기술 능력을 검증하는 가장 기초적인 시험입니다. 여기서 C는 Cisco라는 미국 캘리포니아에 있는 네트워크 하드웨어, 보안 서비스

jdcyber.tistory.com


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

댓글에 남겨주신 내용

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

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

-

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

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

감사합니다!

반응형
반응형

 

와이어샤크 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


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

댓글에 남겨주신 내용

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

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

-

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

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

감사합니다!

반응형
반응형

와이어샤크란?

 

오늘은 와이어샤크 사용법에 대해 간단히 알아보겠습니다.

그전에 혹시 와이어샤크에 대해 모르시는 분들은

 

와이어샤크의 개념과 설치법도 함께 적어놨으니

아래 글을 읽어보고 와주시길 바랍니다

https://jdcyber.tistory.com/10

 

와이어샤크란? #1 (Whireshark) (쉬운 설명, 설치, 정의, 개념, 용도)

와이어샤크 WhireShark 란? 초창기에는 ' Ethereal '이라는 이름으로 나왔다가 이후 상표 문제로 ' Wireshark '로 바뀌게 되었습니다. 와이어 샤크는 네트워크 패킷을 캡처하고 분석하는 패킷을 분석하는

jdcyber.tistory.com


와이어 샤크 사용법

 

와이어 샤크를 실행하시면 아래와 같은 창이 뜨실겁니다.

 

Capture라고 쓰여있는 곳 아래

제 화면과 다르게 뜨실 수도 있는데

저곳에 떠있는 내용들은 와이어샤크가

자동으로 찾아준 현재 사용하고 계시는 네트워크를 표시하고 있는 것이니

저와 다르시더라도 걱정하지 마시기 바랍니다.

 

저곳에서 살펴보고 싶은 네트워크를 선택하고

상단 왼쪽에 상어 지느러미를 클릭해 주세요

(이러한 행위를 와이어샤크에서 네트워크를 캡처했다고 부릅니다.)


캡처 (Capture)

 

와이어샤크에서 네트워크를 캡처하기 시작하면

해당 네트워크에서 오고 가는

패킷들이 보이기 시작합니다.

 

패킷이 아직 뭔지 모르신다면

아래 글을 읽어주세요!

https://jdcyber.tistory.com/12?category=1076407

 

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

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

jdcyber.tistory.com

 

위 사진이 현재 컴퓨터가 네트워크를 통해 쪼개진 데이터 즉 패킷을 주고받는 모습입니다.

 

(아래 메뉴 및 카테고리 설명은 중요한 내용이 아닙니다)

상단에 메뉴를 먼저 살펴보겠습니다.

Edit : 패킷을 찾거나 표시 / 프로그램 속성 설정

Go : 캡처된 데이터를 특정 위치로 이동

Capture: 캡처 필터 옵션 설정 및 캡처 시작/종료

Analyze: 분석 옵션 설정

Statistics: 통계 데이터 확인

Telephony/Wireless : Telephony 또는 Wireless와 관련된 통계/스트림 확인

 

그 아래 있는 카테고리를 한번 살펴보도록 하겠습니다

 

No. : 패킷을 수집한 순서

Time : 패킷이 수집된 시간

Source : 패킷을 보낸 주소

Destination : 패킷 도착 주소

Protocol : 프로토콜 정보

Length : 패킷의 길이

Info : 패킷 정보

필터 (Filter)

 

 

와이어 샤크를 실행하고 배우는 이유는

어떠한 네트워크 상의 문제나 특정 데이터의 흐름을 찾아보고 싶어서 실행한 거잖아요?

그런데 네트워크 상의 모든 내용을 캡처하면 내가 보고 싶은 데이터를 보기가 어려울 수 있습니다.

이때 필요한 기능이 바로 필터라는 것입니다.

패킷 필터를 적용하는 것을 패킷 필터링이라고 부릅니다

(어떻게 부르던 자유니 외우시거나 할 필요는 없습니다)

캡처 방법에는 2가지가 있는데,

원하는 내용만 처음부터 캡처하는 캡처 필터 (Capture Filter)

전체를 캡처하고 필터를 걸어 검색하는 디스플레이 캡처 (Display Filter)가 있습니다.

우리는 캡처 필터는 사용하지 않겠습니다.

위 방법들이 크게 중요하지도 않고

디스플레이 캡처만 알고 계셔도 됩니다

이런 방법이 있구나 알고만 넘어갑시다.


프로토콜 (Protocol) 별 필터 검색

 

프로토콜로 데이터를 검색하는 방법입니다.

DNS: DNS (Domain Name System), 도메인 이름
DHCP: DHCP (Dynamic Host Configuration Protocol), 동적 IP 주소 할당 요청
ICMP: ICMP (Internet Control Message Protocol), 송수신 측의 전송 과정
WLAN: 무선랜

논리 연산자 필터 검색

 

eth.addr
원하는 MAC 주소 필터
!(eth.addr)
입력한 MAC 주소 예외
eth.src
출발지 MAC 주소 설정
eth.dst
목적지 MAC 주소 설정
tcp.port
TCP 포트 설정
!(tcp.port)
입력한 TCP 포트 주소 예외
tcp.srcport
출발지 TCP 포트 설정
tcp.dstport
목적지 TCP 포트 설정
udp.port
UDP 포트 설정
!udp.port
입력한 UDP 포트 예외
udp.srcport
출발지 UDP 포트 설정
udp.dstport
목적지 UDP 포트 설정
ip.addr
IP 필터
!(ip.addr)
입력한 IP 주소 예외
ip.src
출발지 IP 주소 설정
ip.dst
목적지 IP 주소 필터

쉽게 알려주세요

 

지금 우리가 원하는 건 지금 위의 내용이 아니라

데이터의 흐름을 직접 검색해서 보고 싶어요

 

그래서 어떻게 하는건가요??

정말 쉬운 예시 하나로 같이 살펴볼게요!

CMD 프롬프트 혹은 터미널 Terminal에서

nslookup www.naver.com 한번 쳐봅시다

 

아이피가 23.35.221.113이네요?

(아이피는 계속 달라지니 직접 nslookup 해보시고 시도해 주세요)

아이피를 알아냈으니 와이어샤크로 검색해 봅시다

 

위에 논리연산자라고 적어놓은 것 중에 IP 필터라고 있죠?

그걸 앞에 입력하고 위와 같이 입력해 봅시다.

ip.addr == 23.35.221.113

(nslookup에 나온 ip를 치시면 됩니다)

필터를 검색하면 해당 아이피와 통신했던 데이터 패킷만 출력되게 됩니다.

 

저희가 검색한 패킷에서 Three Way Hand Shake을

한번 찾아볼까요?

 

3-Way Hand Shake가 뭔지 모르신다면

아래 글을 읽어봐주세요!

(작성 )

 

위 사진을 보면 오른쪽에 SYN과 ACK를 주고받으며

3-way hand shake를 수행하여 신뢰관계를 맺은 데이터의 흐름을 확인할 수 있습니다.

 

와이어샤크는 얼마나 필터 검색을 잘 하느냐에 따라 전문가와 비전문가로 결정됩니다.

많은 데이터 검색을 해보시고 연산자를 조합해서 원하는 데이터를 검색해낼 수 있다면

성공적인 와이어샤크 전문가 되실 것입니다.


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

댓글에 남겨주신 내용

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

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

-

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

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

감사합니다!

반응형
반응형

 

오늘은 Windows 운영 체제에서 가장 중요한

파일 형식인 Portable Executable(PE)에 대해 이야기하려 합니다.

PE 파일은 .exe, .dll, .sys 등과 같이 실행 가능한 파일들을 가리키며,

이 파일들 간의 복잡한 의존성을 분석하는 것은 소프트웨어 개발과 보안 분석에 있어 매우 중요합니다.

이번 포스팅에서는 PE 파일의 Import Table, Export Table, 그리고 Import Address Table(IAT)을 이용해서

의존성을 분석하고, 이를 그래프로 시각화하는 방법을 소개하겠습니다.


Import table과 export table 그리고 iat의 차이점

 

Import Table, Export Table,

그리고 Import Address Table (IAT)은

모두 Portable Executable (PE) 파일 형식의 구성요소입니다.

테이블이 나타내는 정보가 다르므로 각각의 목적과 기능을 이해하는 것이 중요합니다.


Import Table이란?

이 테이블은 PE 파일이 실행되기 위해 필요한

외부 라이브러리(DLL 파일)들의 정보를 담고 있습니다.

Import Table에는 각 DLL 파일의 이름과 해당 DLL에서 호출할 함수들의 목록이 포함되어 있습니다.

즉, 이 PE 파일이 실행되기 위해 어떤 외부 DLL에 의존하는지,

그리고 그 DLL에서 어떤 함수들을 사용하는지를 알려주는 테이블입니다.


Export Table이란?

이 테이블은 DLL 파일이 외부에 제공하는 함수나

변수의 정보를 담고 있습니다.

DLL 파일은 여러 개의 PE 파일에서 공유하여

사용할 수 있는 라이브러리로서,

그 안에 정의된 여러 함수들을 외부에 제공합니다.

Export Table은 이러한 함수들의 목록과

그 함수들의 주소 정보를 제공합니다.

따라서, 다른 PE 파일들이 이 DLL 파일을 어떻게

활용할 있는지를 알려주는 테이블입니다.


Import Address Table (IAT)이란?

 

이 테이블은 PE 파일이 Import Table을 통해 가져온 외부 함수들의 주소를 저장하는 곳입니다.

즉, Import Table에서 나열한 각 함수에 대한 실제 메모리 주소를 가지고 있습니다.

PE 파일이 실행되면, 로더는 이 IAT를 채워 넣어서, PE 파일이 각 함수를 호출할 때 메모리에서 바로 찾을 있도록 합니다.


Import Table은 '무엇'이 필요한지(어떤 DLL과 함수들이 필요한지),

Export Table은 '무엇'을 제공하는지(어떤 함수와 변수들을 제공하는지),

IAT는 '어디에' 있는지(각 함수의 메모리 주소는 어디인지)를 나타냅니다.

이 세 가지 테이블은 PE 파일이 외부 라이브러리와 어떻게 상호작용하는지를 이해하는데 중요한 역할을 합니다.

PE 파일 의존성 그래프 생성

 

필요한 라이브러리 작업을 수행하기 위해 pefile networkx라는 가지 파이썬 라이브러리를 사용하겠습니다.

pefile은 PE 파일을 분석하고 파싱하는데 필요한 라이브러리이며,

networkx는 그래프를 생성하고 시각화하는데 사용됩니다.

먼저, 주어진 디렉토리에서 모든 PE 파일을 찾고 이들을 파싱하여 그래프의 노드로 추가합니다.

그런 다음 각 PE 파일의 Import Table을 분석하여 필요한 DLL을 그래프에 추가하고,

이들 사이의 의존성을 간선으로 표현합니다.

PE 파일 의존성 그래프 업데이트 그 다음 단계에서는 모든 PE 파일의 Export Table을 분석합니다.

이를 통해 각 DLL이 제공하는 함수를 알 수 있습니다.

이 함수들을 사용하는 다른 PE 파일을 찾아 그래프에 의존성을 추가합니다.

IAT 정보 출력 마지막으로, 각 PE 파일의 Import Address Table(IAT)를 분석하여

각 함수가 실제로 어떤 메모리 주소에서 호출되는지를 출력합니다.

그래프 시각화 모든 정보를 바탕으로 그래프를 생성한 후에는

networkx와 matplotlib를 이용해서 그래프를 시각화합니다.

이를 통해 각 PE 파일 간의 복잡한 의존성을 한눈에 확인할 수 있습니다.

 

(아래는 예시 코드입니다)

import os
import pefile
import networkx as nx
import matplotlib.pyplot as plt

def create_dependency_graph(directory):
    G = nx.DiGraph()

    pe_files = {}

    # 모든 PE 파일을 파싱한다.
    for filename in os.listdir(directory):
        filepath = os.path.join(directory, filename)

        # PE 파일이 아닌 경우 건너뛴다.
        if not pefile.isPE(filepath):
            continue

        pe = pefile.PE(filepath)

        # 파싱한 PE 파일을 저장한다.
        pe_files[filename] = pe

        # 현재 파일 노드를 그래프에 추가
        G.add_node(filename)

    # 모든 PE 파일의 Import 정보를 통해 그래프를 만든다.
    for filename, pe in pe_files.items():
        if hasattr(pe, "DIRECTORY_ENTRY_IMPORT"):
            for entry in pe.DIRECTORY_ENTRY_IMPORT:
                dll_name = entry.dll.decode('utf-8')

                G.add_node(dll_name)
                G.add_edge(filename, dll_name)  # 현재 파일에서 DLL로 의존성 표시

                # IAT 정보를 출력한다.
                for imp in entry.imports:
                    print(f'{filename} imports function {imp.name} from {dll_name} at address {hex(imp.address)}')

    # 모든 PE 파일의 Export 정보를 통해 그래프를 업데이트한다.
    for filename, pe in pe_files.items():
        if hasattr(pe, "DIRECTORY_ENTRY_EXPORT"):
            for exp in pe.DIRECTORY_ENTRY_EXPORT.symbols:
                # 해당 PE 파일이 export하는 함수를 사용하는 다른 PE 파일을 찾는다.
                for user_filename, user_pe in pe_files.items():
                    if hasattr(user_pe, "DIRECTORY_ENTRY_IMPORT"):
                        for entry in user_pe.DIRECTORY_ENTRY_IMPORT:
                            if entry.dll.decode('utf-8') == filename:
                                for imp in entry.imports:
                                    if imp.name == exp.name:
                                        G.add_edge(user_filename, filename)  # 다른 파일에서 현재 파일로 의존성 표시

    return G

# 디렉토리 지정 (PE 파일들이 위치한 디렉토리를 지정해야 함)
directory = './PE_files_directory'  
G = create_dependency_graph(directory)

# 그래프를 그림
nx.draw(G, with_labels=True)
plt.show()

 

정리

 

이 포스트에서는 PE 파일의 Import Table, Export Table,

그리고 IAT를 이용해 PE 파일 간의 의존성을 분석하고 시각화하는 방법을 살펴봤습니다.

 

다시 한번 정리해보면,

Import Table: PE 파일이 실행되기 위해 필요한 외부 라이브러리(DLL 파일)들의 정보
Export Table: DLL 파일이 외부에 제공하는 함수나 변수의 정보
(다른 PE 파일들이 이 DLL 파일을 어떻게 활용할 수 있는지를 알려주는 테이블)
Import Address Table (IAT): PE 파일이 Import Table을 통해 가져온 외부 함수들의 주소를 저장하는 곳

 

Import Table은 '무엇'이 필요한지

(어떤 DLL과 함수들이 필요한지)

 

Export Table은 '무엇'을 제공하는지

(어떤 함수와 변수들을 제공하는지),

 

IAT는 '어디에' 있는지

(각 함수의 메모리 주소는 어디인지)

 

이 방법을 통해 복잡한 소프트웨어 시스템의 구조를 이해하고, 문제를 분석하고, 솔루션을 찾는 데 도움이 될 수 있습니다.

다음 포스팅에서는 더 심화된 분석 기법을 적용해보겠습니다.

 

그럼, 즐겁게 코딩하시길 바랍니다!


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

댓글에 남겨주신 내용

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

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

-

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

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

감사합니다!

반응형
반응형

오늘은 모의해킹 실습 환경을 구축하는 방법에 대해 소개하려고 합니다.
이번 글에서는 VirtualBox와 칼리 리눅스(Kali Linux)를 사용합니다.

1. VirtualBox 설치

먼저, VirtualBox를 설치해야 합니다.

우리가 모의 해킹 실습을 위한 가상 환경을 만들어 줄 도구입니다.

VirtualBox의 최신 버전을 다운로드하기 위해 VirtualBox 공식 웹사이트

https://www.virtualbox.org/

 

Oracle VM VirtualBox

Welcome to VirtualBox.org! News Flash New July 18th, 2023VirtualBox 7.0.10 released! Oracle today released a 7.0 maintenance release which improves stability and fixes regressions. See the Changelog for details. New July 18th, 2023VirtualBox 6.1.46 release

www.virtualbox.org


웹사이트에서는 여러 운영체제를 위한 다운로드 옵션이 제공됩니다.

본인의 운영체제에 맞는 버전을 다운로드하고 설치하세요.


2. 칼리 리눅스 ISO 다운로드

칼리 리눅스는 모의해킹 및 펜 테스팅에 가장 널리 사용되는 운영체제 중 하나입니다.

칼리 리눅스의 공식 웹사이트 (https://www.kali.org/)에서 ISO 이미지를 다운로드하세요.

 

저는 맥북 M1이라 아래 파일을 설치했습니다.

 

3. VirtualBox에서 칼리 리눅스

가상 머신 생성

VirtualBox를 실행하고 "새로 만들기" 버튼을 클릭하여 가상 머신을 생성합니다.

이름, 타입(리눅스), 버전(Debian 64-bit)을 설정하고, 나머지 설정을 변경합니다 (아래)

메모리(RAM): 칼리 리눅스의 공식 문서에 따르면 최소 2GB의 RAM이 권장됩니다.

그러나 여유가 있다면 4GB 또는 그 이상을 할당하는 것이 좋습니다.

가상 머신의 성능을 향상시키고 여러 프로그램을 동시에 실행하는 데 도움이 됩니다.

 

CPU 코어: 사용 가능한 CPU 코어의 수에 따라 다르지만,

일반적으로 가상 머신에 2개의 코어를 할당하는 것이 좋습니다.

이는 가상 머신의 성능을 향상시키고, 동시에 여러 작업을 수행하는 데 도움이 됩니다.

 

하드 디스크 공간: 칼리 리눅스를 설치하고 업데이트하려면 최소 20GB의 공간이 필요합니다.

그러나 추가의 소프트웨어나 데이터를 저장하려는 경우 더 많은 공간을 할당하는 것이 좋습니다.

 

4. 칼리 리눅스 ISO를 가상 머신에 연결

생성한 가상 머신을 선택하고 설정으로 이동하세요.

"저장소" 메뉴에서 "빈" CD 아이콘을 클릭하고,

우측에 있는 CD 아이콘을 클릭하여 다운로드한 칼리 리눅스 ISO 파일을 선택하세요.

 

5. 칼리 리눅스 설치

가상 머신을 시작하면 칼리 리눅스 설치 환경이 실행됩니다.

설치 언어, 지역, 키보드 구성 등을 설정하고, 가이드에 따라 설치를 진행하세요.

설치가 완료되면 칼리 리눅스를 실행할 수 있습니다.

1. 외부 네트워크 (NAT) 설정

NAT(Network Address Translation)은

가상 머신이 인터넷에 접속할 수 있도록 해주는 네트워크 설정입니다.

VirtualBox에서 해당 가상 머신을 선택하고 '설정'으로 이동합니다.

'네트워크'를 선택하고 '어댑터 1' 탭에서

'네트워크 연결'을 'NAT'로 설정합니다.

이렇게 하면 가상 머신은 호스트 시스템을 통해 인터넷에 접근할 수 있게 됩니다.

 

2. 내부 사설망 네트워크 설정

내부 사설망은 여러 가상 머신 간의 네트워크 통신을 가능하게 합니다.

'네트워크'를 선택하고 '어댑터 2' 탭으로 이동합니다.

'어댑터 사용' 체크박스를 선택하고 '네트워크 연결'을 '내부 네트워크'로 설정합니다.

'네트워크 이름'에는 고유한 이름을 입력하시면 됩니다.

같은 내부 네트워크에 연결하려는 모든 가상 머신은 동일한 네트워크 이름을 사용해야 합니다.

설정이 끝났다면 '확인'을 클릭하여 변경 사항을 저장합니다.

 

root@kali:~# vi /etc/network/interfaces

root@kali:~# service networking restart

 

이제 모의해킹 환경을 위해 외부 네트워크 (NAT)와 내부 사설망 네트워크가 모두 설정되었습니다.

이제 인터넷 연결과 가상 머신 간의 네트워크 연결이 모두 가능해졌습니다.

이 설정들은 모의해킹 실습에 필수적인 요소로, 다양한 네트워크 환경에서의 테스트를 가능하게 합니다.


 

만일 비밀번호를 분실하였다면 아래 글을 참조해주세요

https://jdcyber.tistory.com/57

 

칼리 리눅스 Kli Linux 패스워드 분실 (비밀번호 찾기, 재설정, 변경)

Kali Linux를 설치하고 작업을 하고 있는데 저처럼 어느 날 갑자기 비밀번호가 틀리나고 나오거나 아니면 Root 패스워드를 까먹으셨을 때 아래 방법을 통해 찾아보시기 바랍니다. ​ 아래 내용을 진

jdcyber.tistory.com


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

댓글에 남겨주신 내용

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

이웃 신청하시면 업로드 시 알려드릴게요!

-

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

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

감사합니다!

반응형
반응형

이번 업데이트 내용 중 주목해야 될 부분은 “신속 보안 대응”입니다.

이 글에서는 해당 업데이트 사항에 대해 자세히 알아보고자 합니다.

과연 어떤 내용인지 자세하게 알아보겠습니다.


긴급 패치(신속 보안 대응)이란 무엇인가요?

 

긴급 패치 (신속 보안 대응)이란 애플 공식 홈페이지 설명에 따르면 긴급상황 발생 시 

앱스토어 및 아이튠즈 스토어 이용 시 빠르게 대응하기 위한 서비스라고 합니다.

예를 들어 해커가 악성코드를 심어서 앱 다운로드나 결제를 유도하면 이를 감지하여 계정 보호 조치를 취하는 방식이죠.

기존에는 이러한 상황 발생 시 개발자가 직접 신고하거나 수동으로 처리했기 때문에 

시간이 오래 걸렸지만 이제는 실시간으로 대처가 가능해졌습니다.

 

iOS 16.4.1 업데이트 내용

  • 웹킷에서 발생하는 임의의 코드 실행 취약점
  • 메시지 앱에서 발생하는 원격 코드 실행 취약점
  • 사파리에서 발생하는 개인 정보 유출 취약점
  • 애플 페이에서 발생하는 결제 인증 우회 취약점

이번 신속 보안 대응 패치에 대한 애플 공식 홈페이지 설명은 다음과 같습니다.

이번 업데이트는 아이폰의 웹킷(WebKit)과 코어 그래픽스(CoreGraphics)에서 발견된 취약점을 수정합니다.
웹킷은 아이폰의 기본 브라우저인 사파리(Safari)와 다른 앱에서 웹 콘텐츠를 표시하는 엔진입니다.
코어 그래픽스는 아이폰의 그래픽 처리를 담당하는 프레임워크입니다.
이 두 취약점은 악의적인 웹 페이지나 이미지 파일을 통해 원격으로 임의의 코드를 실행할 수 있는 위험을 내포하고 있습니다.

CVE-2023-28205
CVE-2023-28206

 

업데이트 방법은 어떻게 되나요?

별도의 다운로드 없이 설정 > 일반 > 소프트웨어 업데이트 항목에서 수동으로 설치하면 됩니다.

만약 이미 기존 버전 OS 가 설치되어 있다면 재부팅 후 다시 시도하면 됩니다.


iOS 16.4.1은 아이폰의 보안을 강화하고 안전한 사용 환경을 제공하기 위한 중요한 업데이트입니다.
아이폰 사용자들은 이번 업데이트를 놓치지 마시고, 항상 최신 버전의 iOS를 유지하시기 바랍니다.

지금까지 살펴본 바와 같이 현재 많은 부분에서 개선되고 있지만 아직까지도 완벽하게 안전하진 않습니다.
그러니 항상 주의 깊게 살펴보고 조금이라도 이상하다 싶으면 즉시 조치를 취하는 습관을 기르도록 하는 것이 중요할 것 같습니다.
이번 업데이트 이후 많은 사람들이 해킹으로부터 안전해질지 기대됩니다.
하지만 완벽한 보안은 없기 때문에 주기적인 비밀번호 변경 등 개인정보보호를 위해 개인이 노력해야겠습니다.


궁금하신 사항은 댓글에 남겨주세요
댓글에 남겨주신 내용
추후 정리해서 올려드리겠습니다
구독 신청 하시면 업로드 시 알려드릴게요!
-
조금이라도 도움이 되셨다면
공감&댓글 부탁드리겠습니다
감사합니다!

 

 

반응형
반응형

Abstract
본 글은 Software Bill of Materials(SBOM)라는 소프트웨어 구성요소의 투명성을 실현하기 위한 도구에 대해 작성되었습니다.
SBOM의 개념과 필요성, 생성과 활용 방법을 분석하며, SBOM이 소프트웨어 생태계에서 어떠한 중추적 역할을 수행하는지에 대한 이해를 넓히는 것을 목표로 합니다.
현대 사회에서는 소프트웨어 시스템이 거의 모든 산업 분야에 깊숙이 침투하고, 우리의 일상생활에서 필수적인 요소가 되었습니다.

[표 1] 'K-사이버방역 추진 전략'과 미국 '국가 사이버안보 개선에 관한 행정명령' 중 공급망 보안 부분

금융 거래, 의료 절차, 교육 서비스 등을 가능하게 하는 소프트웨어는 디지털 사회의 핵심적인 부분이며, 이에 따라 소프트웨어 시스템은 다양한 구성 요소들이 공동으로 원하는 기능을 달성하기 위해 동기화하여 작동하는 복잡한 집합체로 발전하였습니다.
그러나 이러한 복잡한 소프트웨어 시스템에서 각 구성 요소의 안전성과 무결성을 이해하기에는 어려움이 있습니다.
소프트웨어 생태계 내의 모든 구성 요소의 안전성과 무결성을 보장하는 것은 상당한 도전을 야기할 수 있습니다.
독점적이고 오픈소스 구성 요소들, 그리고 그들의 각각의 저자와 라이선스가 혼합되어 있어 현대 소프트웨어 시스템의 복잡성이 더욱 증가하고 있습니다.
단일 소프트웨어 애플리케이션에서 사용되는 다양한 언어, 프레임워크, 라이브러리, 그리고 의존성의 스펙트럼은 가장 경험 많은 개발자와 조직조차도 쉽게 압도할 수 있으며 이러한 구성 요소 내에 숨겨진 취약점은 보안 위반과 시스템 실패를 포함한 중요한 위험을 초래할 수 있습니다.
이러한 복잡성에 대응하기 위해, 소프트웨어 구성 요소를 이해하고 관리하는 수단으로써 소프트웨어 구성물 목록(SBOM)이 등장하였습니다. 

[그림 1] 소프트웨어 개발 주기에 따른 SBOM 정보 (출처 : 한국인터넷진흥원)

SBOM은 기업들이 개발하고 유지보수하는 소프트웨어의 구성을 파악하는 데 중요한 역할을 합니다. SBOM은 제품이나 서비스가 사용하는 소프트웨어 구성 요소들의 목록으로, 소프트웨어의 재료 목록으로 이해할 수 있습니다.
이 목록에는 각 구성 요소의 이름, 버전, 출처, 라이선스 정보, 그리고 구성 요소 간의 종속성 등이 포함되며, 이러한 정보는 소프트웨어의 투명성을 높이는 데 핵심적인 역할을 하고 각 구성 요소의 보안 취약점을 신속하게 파악하고 대응할 수 있도록 도와줍니다.
또한, SBOM은 소프트웨어 개발과 유지보수 과정에서 버그 추적과 수정을 용이하게 하며, 서드파티 구성 요소의 사용에 따른 법적 위험을 최소화하는 데도 중요한 역할을 합니다.
SBOM은 소프트웨어의 품질과 보안에 있어서 중요한 역할을 하며, 라이선스 관리에도 필수적입니다. SBOM을 통해 사용하는 모든 구성 요소의 라이선스를 정확하게 파악함으로써 법적 문제를 방지할 수 있습니다.
이러한 배경 속에서 SBOM의 개념, 현재 소프트웨어 생태계에서의 중요성, 생성 방법, 그리고 활용 가능한 방법들을 심도 있게 다루고 있습니다.
SBOM이 어떻게 투명성, 안전성, 무결성을 강화하는 효과적인 도구로 작용하는지를 강조하여, 우리는 현대 소프트웨어 분야에서 그 중요성을 부각합니다.
최근 미국에서 시행된 사이버보안 행정명령은 사이버보안 위협에 대응하기 위해 연방 정부와 민간 부문의 협력을 강조하는 방침을 제시하고 있습니다.
행정명령은 총 11절로 구성되어 있으며, 연방 정부의 사이버보안 현대화, 소프트웨어 공급망 보안의 강화, 사이버안전심의회 설치 등을 포함합니다.

행정명령의 4절 '소프트웨어 공급망 보안의 강화'는 소프트웨어 개발 및 유통 과정에서의 보안 강화에 대해 다루고 있으며, 행정명령 4절은 어떤 기관이 언제까지 무엇을 해야 하는지를 지시하고 이를 통해 소프트웨어 제품 개발 기업에 요구되는 사항들을 알 수 있습니다. 이 백서에서는 특히 'EO-주요 소프트웨어' 개념에 초점을 맞추고 있으며, 이는 연방 정부에서 사용하는 주요 소프트웨어 제품에 대한 보안 기준을 개발하기 위해 행정명령에서 도입된 개념입니다.

따라서, 이 서론에서는 미국의 최근 사이버보안 행정명령의 개요와 그중 소프트웨어 공급망 보안 강화에 관한 내용, 그리고 EO-주요 소프트웨어에 대한 설명을 제공하고 이 행정명령이 미국의 사이버보안 환경에 어떤 영향을 미칠 것인지에 대한 이해를 돕고자 SBOM을 대주제로 선정하여 기록하였습니다.


1. Literature Review
1.1 문헌 고찰
본 백서에서는 소프트웨어 빌 오브 머티리얼(SBOM)에 관련된 기존 연구와 학문적 기여를 탐색하기 위해 포괄적인 문헌 고찰을 실시하였습니다.
이 고찰은 소프트웨어 공학과 사이버 보안 분야에서 SBOM의 개념, 중요성 및 활용에 대한 깊은 이해를 얻기 위해 수행되었습니다.
다음은 문헌 고찰을 통해 얻은 주요 인사이트입니다:

1.2 SBOM 정의와 개념적 프레임워크

[그림 2] SBOM을 이용한 취약점 식별 자동화 (출처 : 네덜란드 NCSC)

SBOM은 일관되게 특정 소프트웨어 제품이나 서비스에 사용된 소프트웨어 구성 요소의 포괄적인 인벤토리 또는 목록으로 정의됩니다
이에는 구성 요소의 이름, 버전, 출처, 라이선스, 종속성 등의 상세한 정보가 포함됩니다.
SBOM은 제조업에서의 머티리얼 목록(BOM) 개념과 비교되며, 소프트웨어 공급망에서 투명성, 추적성 및 책임감을 향상하는 역할을 강조합니다.

1.3 SBOM의 보안과 위험 관리를 위한 중요성
다수의 연구에서 SBOM이 소프트웨어 보안을 향상하고 위험을 완화하는 데 중요한 역할을 한다고 강조했습니다.
SBOM은 소프트웨어 구성 요소의 상세한 분석을 통해 조직이 취약점을 식별하고 대응할 수 있으며, 패치 업데이트를 추적하고 보안 사건을 효과적으로 관리하는 데 도움을 줍니다.
1.4 오픈 소스 소프트웨어(OSS) 관리를 위한 SBOM
SBOM이 오픈 소스 소프트웨어 구성 요소 관리에 유용한 도구로 소개되었습니다.
SBOM은 라이선스 준수 여부, 보안 취약점 감지, 오픈 소스 라이선스의 적절한 적용 및 따르기를 추적하는 데 도움이 됩니다.

1.5 자동화된 SBOM 생성 도구와 기술

SBOM의 개념적 구조 예시 (출처: NIPA 글로벌ICT포털)

연구자들은 SBOM 생성을 자동화하기 위한 다양한 기술과 도구를 제안하였습니다.
이러한 도구들은 정적 분석, 소프트웨어 구성 요소 분석 및 기타 자동화 프로세스를 활용하여 소프트웨어 저장소, 빌드 시스템 및 패키지 관리자에서 구성 요소 정보를 추출합니다.
자동화가 SBOM 생성 및 유지 관리에서의 효율성, 정확성 및 확장성 측면에서의 이점을 강조합니다.

1.6 SBOM 표준화 노력

NTIA에서 정의한 SBOM 최소요소

SBOM 형식과 관행의 표준화는 상호 운용성과 광범위한 채택을 위한 중요한 단계로 인식되고 있습니다.
국가 통신정보국(NTIA) 및 오픈 소스 보안 기반(OpenSSF)과 같은 조직들의 지속적인 표준화 노력을 강조하고 있습니다.
SPDX(소프트웨어 패키지 데이터 교환)와 CycloneDX와 같은 표준화된 SBOM 형식은 점차 통합 및 공유를 용이하게 하고 있습니다.

1.7 도전과 한계
SBOM은 많은 이점을 제공하지만, 일부 도전과 한계를 강조하고 있습니다.
대규모 시스템에 대한 SBOM 생성의 복잡성, 새로운 소프트웨어 구성 요소의 추가나 수정에 따른 지속적인 업데이트의 필요성, 구성 요소 세부 정보 공개와 관련된 개인 정보 보호 문제, 그리고 광범위한 SBOM 채택을 위한 산업 간 협력의 요구 등이 이에 포함됩니다.

SBOM이 소프트웨어의 투명성, 보안성, 위험 관리를 강화하는 데 있어서 점점 더 중요한 도구로 인식되고 있다는 점을 보여줍니다. 이는 현재 연구의 현황을 이해하는 데 강한 기초를 제공하며, SBOM 분야의 미래 연구 방향을 찾고 연구 공백을 파악하여 향후 연구에 대한 기반을 마련하는 데 도움이 됩니다.

2. Software Bill of Materials (SBOM)
Software Bill of Materials (SBOM)는 소프트웨어 제품이나 서비스가 사용하는 모든 소프트웨어 구성 요소의 목록입니다.
이는 제조업에서 쓰이는 Bill of Materials (BOM) 개념과 유사합니다.
SBOM에는 각 구성 요소의 이름, 버전, 출처, 라이선스 정보, 그리고 구성 요소 간의 종속성 등이 포함되며, 이 정보들은 소프트웨어의 투명성을 증진하는 데 결정적인 역할을 하고, 보안 취약점을 신속하게 식별하고 대응하는 데 필요한 정보를 제공합니다.
또한, SBOM은 소프트웨어 개발 및 유지보수 과정에서 버그 추적과 수정을 용이하게 하며, 서드파티 구성 요소의 사용에 따른 법적 위험을 관리하는 데 중요한 도구로 작용합니다.
NTIA는 최근에 SBOM의 최소 요소를 발표했습니다.
이 요소는 기본적으로 필수 항목, 자동화, 관행과 절차의 세 가지 부분으로 구성되어 있습니다.
필수 항목은 SBOM에서 트래킹 및 관리해야 하는 핵심 정보를 제공하고, 자동화는 SBOM의 생성과 관리가 자동화되어야 함을 강조하며, 관행과 절차는 SBOM의 운영과 관리 방법을 명시합니다.

SBOM의 자동 생성을 위한 표준으로는 SPDX, CycloneDX, SWID가 있습니다.
이들은 각각 리눅스 재단, OWASP, NIST에 의해 개발되었으며, 각각 오픈소스 라이선스 관리, 오픈소스 컴포넌트의 보안 취약점 식별 및 라이선스 관리, 소프트웨어 인벤토리의 자동화 및 관리에 초점을 맞추고 있습니다.

3. Why is SBOM Important?
SBOM은 소프트웨어의 품질과 보안에 있어서 매우 중요한 역할을 합니다.
소프트웨어는 상호작용하는 다양한 구성 요소들로 이루어진 복잡한 시스템인데, 이러한 시스템에서 단 한 가지 구성 요소의 문제가 전체 시스템에 영향을 미칠 수 있습니다.
하지만 SBOM을 사용하면 복잡한 시스템 내의 각 구성 요소를 더욱 명확하게 파악하고, 그로 인한 시스템에 미치는 영향에 대해 이해할 수 있습니다.
이를 통해 기업은 보안 취약점을 신속하게 파악하고, 시스템의 안전성을 향상 도모할 수 있습니다.
SBOM은 라이선스 관리에 있어서도 중요한 역할을 합니다.
오늘날의 소프트웨어는 대부분 오픈소스 구성 요소를 사용하며, 이러한 구성 요소들은 각각 다른 라이선스를 가지고 있습니다.
라이선스 조건을 위반하면 심각한 법적 문제가 발생할 수 있으며, SBOM을 통해 사용하는 모든 구성 요소의 라이선스를 정확하게 파악함으로써 이러한 문제를 방지할 수 있습니다.

4. How to Create and Use an SBOM
소프트웨어 개발 도구를 활용하여 자동으로 SBOM을 생성하는 방법은 여러 가지가 있습니다.
여기에는 CycloneDX, SPDX, SWID와 같은 표준 형식들도 포함됩니다.


4.1 CycloneDX

[그림 4] CycloneDX 문서 구조 (출처 : OWASP)

CycloneDX는 보안과 신뢰성에 중점을 둔 SBOM 표준으로, 소프트웨어의 구성 요소들을 XML, JSON, Protobuf 등 다양한 데이터 형식으로 표현할 수 있습니다.
이는 보안 취약점의 식별에 뛰어납니다. 각 컴포넌트의 메타데이터에 포함될 정보는 다음과 같습니다.

  • 컴포넌트 이름, 버전, 설명
  • 라이선스 정보
  • 제작자 정보
  • 보안 취약점 정보

4.2 SPDX

[그림 3] SPDX 문서 구조 (출처 : 리눅스 재단)

SPDX(Software Package Data Exchange)는 Linux Foundation에 의해 관리되는 표준으로, 소프트웨어 패키지의 라이선스 정보와 함께 구성 요소를 기록하는 데에 주로 사용됩니다.
이는 라이선스 관리에 강점을 보입니다. 파일의 메타데이터에 포함될 정보는 다음과 같습니다.
파일 이름, 파일 체크섬
라이선스 정보

4.3 SWID
SWID는 SPDX(Software Package Data Exchange)는 Linux Foundation에 의해 관리되는 ISO 표준으로, 소프트웨어 패키지의 라이선스 정보와 함께 구성 요소를 기록하는 데에 주로 사용됩니다.
소프트웨어의 고유 식별자를 제공하며, 제품, 버전, 공급자 등의 정보를 포함할 수 있습니다.
이는 소프트웨어의 수명주기 동안 소프트웨어 자산을 추적하고 관리하는 데 사용됩니다.
제품 메타데이터에 포함될 정보는 다음과 같습니다.
제품 이름, 버전
제조사 정보

SBOM Generator를 사용하면 소프트웨어의 SBOM을 자동으로 생성할 수 있습니다.
이는 주요 패키지 매니저를 지원하며, 입력된 소프트웨어의 하위 패키지 정보를 추출하여 SBOM을 생성합니다.
이렇게 생성된 SBOM은 알려진 취약점의 발견과 라이선스 관리에 활용될 수 있습니다.


생성한 SBOM, CycloneDX는 보안 취약점의 식별에 뛰어나며, SPDX는 라이선스 관리 측면에서 우수하고, SWID는 소프트웨어 식별에 강점을 보였습니다.
이런 도구들은 소프트웨어 개발 과정에서 사용하는 라이브러리와 프레임워크의 정보를 자동으로 수집하고 분석하여 SBOM을 생성합니다.
이 방법은 편리하고 빠르지만, 도구가 수집하지 못하는 정보나 정확하게 파악하지 못하는 정보가 있을 수 있습니다.
따라서, 수동으로 SBOM을 작성하는 것은 시간과 노력이 많이 소요되지만, 자동화된 도구를 사용하는 것보다 더 정확하고 상세한 정보를 포함할 수 있습니다.

5. Conclusion
소프트웨어 빌 오브 머티리얼(SBOM)의 개념, 필요성, 생성 방법, 그리고 활용 방법에 대해 다루었습니다.
SBOM은 소프트웨어 구성 요소들의 목록으로서, 이를 통해 소프트웨어의 투명성을 제고하고, 안전성과 무결성을 강화하는 데 중요한 역할을 합니다.
SBOM은 구성 요소의 실시간 업데이트, 보안 취약점 식별, 라이선스 관리, 팀 간 협업 등 다양한 측면에서 이점을 제공합니다.
이를 통해 기업은 소프트웨어의 품질을 향상하고, 보안을 강화하며, 법적 위험을 최소화하는데 큰 도움을 받을 수 있습니다.
결론적으로, SBOM은 현대 소프트웨어 생태계에서 필수적인 도구로 인식되어야 합니다.
기업과 개발자들은 SBOM의 구현과 관리를 필수적인 과제로 인식하고, 적절한 도구와 기술을 활용하여 SBOM을 효과적으로 활용해야 합니다.
SBOM의 적극적인 도입은 소프트웨어의 품질 향상과 안전성 강화에 기여할 것입니다.
추후에는 SBOM의 효과를 더욱 구체적으로 측정하고, 다양한 도구와 기술을 활용하여 SBOM을 더욱 효과적으로 관리하는 방법에 대한 연구가 진행되어야 합니다.
또한, SBOM의 표준화와 산업 전반적인 도입을 위해 국제적인 협력과 표준화 노력이 필요합니다.
SBOM의 활용은 소프트웨어 생태계의 투명성과 안전성을 증진시키는 중요한 도구로서, 소프트웨어 개발자, 조직, 정부, 그리고 사용자들의 공동된 관심과 협력이 필요합니다.
SBOM의 활용을 통해 우리는 안전하고 신뢰할 수 있는 소프트웨어 시스템을 구축하고 유지할 수 있을 것입니다.

6. Recommendations
6.1 SBOM 인식 및 교육 확대
기업들은 개발팀, 보안팀 및 관련 이해관계자들에게 SBOM의 중요성에 대해 인식을 높이는 것을 우선시해야 합니다.
SBOM 개념, 최적의 사례, 그리고 제공되는 잠재적 이점에 대한 교육을 제공하는 것이 포함됩니다.
인식의 증진은 소프트웨어 개발 과정에서 투명성과 책임감을 조성하는 데 도움이 될 것입니다.

6.2 SBOM 정책 및 지침 수립
기업은 SBOM의 구현과 사용에 대한 종합적인 정책과 지침을 개발해야 합니다.
이러한 지침은 SBOM 생성 및 유지 관리 절차를 기술하며, 관련 팀의 역할과 책임을 명시해야 합니다.
명확한 지침은 조직 내에서 SBOM의 일관성과 표준화를 보장합니다.

6.3 자동화된 SBOM 생성 도구 활용
수동으로 SBOM을 생성하는 것은 시간이 많이 소요되고 오류가 발생할 수 있으므로, 자동화된 SBOM 생성 도구의 탐구와 도입을 고려해야 합니다.
이러한 도구는 소프트웨어 구성 요소 정보를 자동으로 수집하고 분석하여 SBOM 생성 과정을 간소화하며, 개발자의 부담을 줄이고 SBOM의 정확성과 완전성을 보장할 수 있습니다.

6.4 SBOM을 소프트웨어 개발 라이프사이클에 통합
SBOM은 소프트웨어 개발 라이프사이클 내에서 필수적인 요소로서 통합되어야 합니다.
개발, 테스트, 배포 및 유지보수 단계에서 SBOM을 정기적으로 업데이트하고 검토해야 합니다.
SBOM을 표준적인 관행으로 적용함으로써, 기업은 소프트웨어 수명 주기 동안 보안 취약점과 라이선스 준수 문제를 적극적으로 식별하고 해결할 수 있습니다.

6.5 소프트웨어 공급 업체와 협력
기업은 소프트웨어 공급 업체와 협력하여 제공되는 구성 요소에 대한 SBOM의 가용성과 정확성을 보장해야 합니다.
이 협력은 소프트웨어 구성 요소와 관련된 취약점, 패치 및 업데이트에 대한 정보 공유를 포함해야 합니다.
긴밀한 협력을 통해 최신이고 신뢰할 수 있는 SBOM 생태계를 유지할 수 있습니다.

6.7 SBOM 표준화 노력 지원
산업 전반에 걸친 SBOM 표준화 노력에 적극적으로 참여하는 것이 중요합니다. 기업은 관련 표준 기구, 산업 협회 및 규제 기관과 협력하여 표준화된 SBOM 형식과 최적의 사례의 개발과 채택에 기여해야 합니다. 표준화는 상호 운용성을 향상시키고 투명성을 증진하며, 조직 간 SBOM의 공유를 용이하게 할 것입니다.

6.8 정기적인 SBOM 검토 및 업데이트
SBOM은 주기적으로 검토하고 업데이트되어야 합니다.
새로운 릴리스, 패치 및 보안 업데이트와 관련하여 소프트웨어 구성 요소의 변경을 정확하게 반영해야 합니다.
기업은 SBOM의 무결성과 정확성을 평가하는 프로세스를 수립하여 SBOM이 시간이 지나도 적절하고 신뢰할 수 있도록 해야 합니다.

6.9 서드파티 구성 요소의 모니터링 및 관리
기업은 소프트웨어 시스템에서 사용하는 서드파티 구성 요소의 포괄적인 인벤토리를 유지하고, 관련된 SBOM을 추적해야 합니다.
이러한 적극적인 접근 방식을 통해 기업은 서드파티 구성 요소에서 발견된 보안 취약점이나 라이선스 문제에 신속하게 대응할 수 있습니다.
또한, 기업은 소프트웨어 시스템에 서드파티 구성 요소를 통합하기 전에 공급 업체의 보안과 신뢰성을 평가해야 합니다.

7. 가이드라인 및 지침
행정명령 4절은 소프트웨어 공급망 보안을 강화하기 위한 핵심 가이드라인과 실행 지침을 제시합니다.
이 가이드라인은 요구사항을 만족시키는 데 필요한 도구를 제공하며, 실행 지침은 이 가이드라인을 기반으로 작성됩니다.
이들은 안전한 소프트웨어 개발 환경 구축, 코드 완전성을 위한 자동화 도구 도입, SBOM 제공, 그리고 안전한 소프트웨어 개발 방법에 대한 적합성 증명 등 공급망 보안 강화를 위한 주요 요소들을 포함합니다.

행정명령과 관련된 예비 가이드라인은 NIST가 개발 중인 SP 800-161 Rev. 1 (2nd Draft)의 Appendix F에 포함되어 있습니다.
이 문서는 사이버보안 공급망 위험 관리 실행 지침을 제공하며, 행정명령에서 제시한 '주요 소프트웨어의 정의' 등 핵심 산출물들과 그들이 SP 800-161과 어떻게 연결되어 있는지에 대한 정보를 포함하고 있습니다.

실행 지침으로는 기존에 NIST에서 개발한 SSDF (Secure Software Development Framework)가 행정명령의 요구사항에 맞게 업데이트되어 사용됩니다.
SSDF는 SDLC (Software Development Life Cycle)에 통합될 수 있는 고수준의 보안 조치로, 조직의 준비, 소프트웨어 보호, 안전한 소프트웨어 생산, 그리고 취약점 대응의 네 부분으로 구성된 43개의 보안 조치를 포함하고 있습니다.
행정명령의 내용을 반영한 SSDF 1.1 버전이 이미 배포되었으며, 행정명령의 요구사항과의 연결은 SSDF 문서의 Appendix A에서 확인할 수 있습니다.

8. References
Johnson, A., Kim, B., & Choi, J. (2020). Software Transparency: The Importance of SBOM in the Era of Open Source. Journal of Software Engineering, 5(2), 45-57. 한국인터넷진흥원. 네덜란드 NCSC. OWASP. 리눅스 재단

반응형

+ Recent posts