주로 IPv4 네트워크에서 사용되며, 데이터 링크 계층에서 호스트 간의 통신을 가능하게 합니다.
ARP Spoofing:MAC 주소를 기반 공격, 네트워크에서 ARP를 조작하여 데이터 전송을 가로채는 방식입니다. Man-in-the-Middle Attack: 공격자가 게이트웨이 주소를 변경하여 패킷에 URL을 삽입하고, 이를 통해 데이터를 가로채거나 변조합니다. / 공격자가 두 당사자 간의 통신을 가로채고, 조작하거나 도청하는 공격 방식
Layer 3 BGP (Border Gateway Protocol) Hijacking: 네트워크 경로를 악의적으로 변경하여 트래픽을 가로채는 공격입니다.
응용 계층
DNS (Domain Name System): TTL (Time to Live): TTL이 짧으면 DNS 질의에 부하가 걸립니다. TTL이 길면 DNS 질의가 줄어들어 서버에 가는 부하가 적습니다. DNS Sinkhole: 악성 트래픽을 차단하기 위해 DNS 요청을 조작하여 가짜 IP 주소로 유도하는 기술입니다. BGP 하이재킹 탐지 BGP 하이재킹을 탐지하기 위해서는 자신이 소유한 prefix보다 하나 작은 prefix를 모니터링해야 합니다.
BGP Hijacking
BGP(경계 게이트웨이 프로토콜)는 인터넷에서 서로 다른 네트워크, 즉 AS(자율 시스템) 간에 라우팅 정보를 교환하는 프로토콜입니다. 여기서 AS는 특정 조직이나 기업이 관리하는 IP 주소 대역을 의미합니다.
예상문제 BGP Hijacking 공격 대응 방안
IP 대역에 맞지 않는 트래픽이 발생하는지 확인
갑자기 응답 패킷의 양이 변하는지 확인
잘못 연결되어 리다이렉트되는 트래픽이 있는지 등을 체크하면서 꾸준히 모니터링
또한, 특정한 대역만 허용하도록 하는 화이트리스트 사용
(화이트리스트: 특정한 IP 주소, 도메인, 또는 네트워크 대역만을 허용하여 접근을 제어하는 보안 메커니즘)
라우팅 정보의 무결성을 보장하는 인증서를 발행하여통신의 신뢰성을 올리는 방법
복원력resilience
복원성 있는 네트워크는 주어진 권한을 벗어나는 행위를 빠르게 식별하고 이러한 행위를 격리할 수 있어야 한다.
복원성 있는 네트워크는 통제 가능하도록 구성되어야 하며 이를 통해 잠재적피해를 최소화할 수 있어야 한다.
Ex) 7.7 DDos 공격은 대응할 수 있는 장치가 구성되어 있지 않았다.
이때 가장 중요한 것은 탐지된 비정상 행위를 격리하되비즈니스 연속성 보장을 위한 작업의 생존성을 보장하여야 한다.
제로트러스트
제로트러스트는 경계선 기반 방어체계의 한계를 극복하기 위해 구성됨
제로트러스트는 자산의 중요도를 따진다. 자산을 식별하고 가치를 매기는 것이 어렵다.
경계선 기반 방어쳬계의 완벽한 항복 선언 ( 경계선 기반 방어는 증가된 공격표면을 감당하지 못함)
why ? 경계선을 만들 수 없다, 다른회사들 소프트웨어 쓰는거, 클라우드 기반 등을 지켜야 하는데 경계선이 무한히 확장되었기 때문에 지킬 수가 없다. 그래서 좀 더 자른 경계를 만들어야 한다 그게 제로트러스트이다.
네트워크의 구조변화를 통한 네트워크 가시성 확보에서 시작 ( 방어 가능한 네트워크 )
2021년 제로트러스트 선언
누구도 믿지 않겠다는 것이다. 제로 트러스트 전략에 따르면 안전한 영역도 없고, 안전한 사용자도 없다. 내부인이라도 철저한 인증과 신원 확인을 거쳐야 한다. 네트워크를 사용할 수 있는 시스템과 정보 접근 권한도 최소화할 필요가 있다.
SDN (Software Defined Network), 오버랩 네트워크
SDN과 오버랩 네트워크는 현대의 IT 환경에서 중요한 역할을 하며, 네트워크 관리의 효율성을 높이고, 변화하는 비즈니스 요구에 신속하게 대응할 수 있게 해줍니다. 이러한 기술들은 특히 클라우드 컴퓨팅, 데이터 센터, 그리고 대규모 네트워크 환경에서 큰 주목을 받고 있습니다.
Root DNS
DNS의 역할: DNS(도메인 네임 시스템)는 도메인 이름을 IP 주소로 변환하여 인터넷에서의 통신을 가능하게 합니다.
DNS 서버의 종류: DNS 서버는 다양한 도메인 최상위 도메인(TLD)을 관리합니다. 예를 들어, .com, .net, .org 등의 도메인을 담당하는 DNS 서버가 있습니다.
13개의 DNS 서버 구성: 총 13개의 DNS 서버가 있으며, 이 서버들은 각각 특정 TLD를 관리합니다. 이들 서버는 고유한 IP 주소를 가지고 있으며, 도메인 네임에 대한 정보를 응답합니다.
책임 분담: 각 DNS 서버는 특정 도메인에 대한 요청을 처리합니다. 예를 들어: .com TLD를 담당하는 DNS 서버 .net TLD를 담당하는 DNS 서버 .org TLD를 담당하는 DNS 서버
응답 주소: 각 DNS 서버는 해당 TLD에 대한 도메인 이름의 IP 주소를 응답할 수 있습니다. 이 주소는 로그에 기록된 IP 주소들로 나타납니다.
요약 DNS 서버: 총 13개, 각각 특정 TLD를 관리 TLD 종류: .com, .net, .org 등 기능: 도메인 이름을 IP 주소로 변환하여 응답 응답 주소: 각 DNS 서버는 고유한 IP 주소를 가지고 있으며, 해당 도메인에 대한 정보를 제공
** CCTLD는 "Country Code Top-Level Domain"의 약자로, 국가 또는 특정 지역에 대한 도메인 네임을 나타내는 최상위 도메인입니다.
168.126.63.1 DNS 서버는 자신의 레코드에 해당 도메인 정보가 없으므로, 다른 DNS 서버(예: 루트 DNS 서버 또는 TLD DNS 서버)에 요청을 전달합니다. 응답 수신:
최종적으로, 해당 도메인에 대한 정보가 있는 DNS 서버에서 http://www.naver.com의 IP 주소를 찾아서 168.126.63.1 DNS 서버로 응답합니다. PC로 응답 전달:
168.126.63.1 DNS 서버는 찾은 IP 주소를 PC로 다시 전달합니다. 이제 PC는 http://www.naver.com에 대한 IP 주소를 알고, 해당 웹사이트에 접근할 수 있습니다.
PC -> 설정된 DNS서버 -> Root DNS or TLD DNS server (IP GET) -> 설정된 DNS 서버 -> PC (사이트 접근)
Firewall(정책을 걸어서 끊는다) - > IDS (string기반 침입 탐지장치) - > IPS( IDS + active response ((TCP 통신을 reset 기반 통신차단 기법을 이용해 통신을 차단하는 장치)
패킷에는 타임스탬프가 없고 피캡에는 있다.
패킷: 일반적으로 패킷 자체에는 타임스탬프 정보가 포함되어 있지 않습니다. 패킷은 전송된 데이터의 기본 단위로, 수신 시각이나 생성 시각 같은 메타데이터를 포함하지 않습니다. 피캡 파일:
피캡 파일(.pcap 형식)은 네트워크 패킷을 캡처하여 저장하는 파일로, 각 패킷의 전송 시간 정보를 포함할 수 있습니다. 이 파일은 패킷 분석 도구(예: Wireshark)를 사용하여 열어볼 수 있습니다.
타임스탬프 옮기기 타임스탬프를 피캡 파일에 옮기는 작업은 다음과 같은 절차로 진행됩니다.
패킷 캡처: 네트워크 트래픽을 캡처하여 피캡 파일로 저장합니다. 이때 각 패킷의 수신 시각이 타임스탬프로 기록됩니다.
타임스탬프 추출: 피캡 파일에서 각 패킷의 타임스탬프를 추출합니다. 이를 위해 Wireshark와 같은 패킷 분석 도구를 사용할 수 있습니다.
타임스탬프 저장: 추출한 타임스탬프를 각 패킷에 대응하여 별도의 파일이나 데이터베이스에 저장할 수 있습니다. 이 데이터는 나중에 패킷 분석 시 유용하게 활용될 수 있습니다.
분석: 타임스탬프 정보를 활용하여패킷의 전송 시간, 지연 시간, 패킷 손실 등을 분석할 수 있습니다.
1. 싱크홀(Sinkhole) 네트워크 보안에서 싱크홀은 악성 트래픽을 특정 서버로 유도하여 분석하거나 차단하는 기술입니다. 이를 통해 공격을 감지하고 방어할 수 있습니다.
2. 패킷에서 존을 바라보는 이유 존(Zone): 패킷의 특정 필드에서 "존" 정보를 확인하여 해당 패킷이 싱크홀과 관련이 있는지 판단할 수 있습니다. 이 정보는 패킷의 출처나 목적지를 분석하는 데 유용합니다.
3. IP TTL (Time to Live) TTL 개념: TTL 값은 패킷이 네트워크에서 얼마나 오래 살아남을 수 있는지를 나타냅니다. 각 라우터를 통과할 때마다 TTL 값이 감소합니다. 윈도우 vs 리눅스: 윈도우: 기본 TTL 값은 64입니다. 리눅스: 기본 TTL 값은 127입니다. 마지막 0이 될 때: TTL 값이 0이 되면 패킷은 폐기됩니다. 따라서 TTL 값을 통해 패킷의 경로를 추적할 수 있습니다.
4. 3-Way Handshake 정의: TCP 연결을 설정하기 위한 과정으로, 다음과 같은 단계로 이루어집니다: SYN: 클라이언트가 서버에 연결 요청을 보냅니다. SYN-ACK: 서버가 클라이언트의 요청을 수락하고 응답합니다. ACK: 클라이언트가 서버의 응답을 확인합니다. 에크(ACK): 이 단계에서 클라이언트와 서버 간의 연결이 완전히 설정됩니다.
5. HTTP Request 푸쉬(PUSH): 클라이언트가 서버에 데이터를 전송할 때 사용됩니다. 이때 HTTP 요청이 발생합니다.
6. DNS TTL 정의: DNS TTL은 캐시된 DNS 레코드가 얼마나 오랫동안 유지될지를 결정합니다. 이 값이 만료되면 DNS 서버는 해당 정보를 새로 요청해야 합니다.
7. 기타 용어 핑(PING):네트워크 연결을 테스트하기 위해 ICMP 프로토콜을 사용하는 명령어입니다. 네트워크의 응답 시간을 측정하는 데 사용됩니다. 신(SYN): TCP 연결 요청을 나타내는 플래그입니다. 리셋(RST): TCP 연결을 강제로 종료할 때 사용되는 플래그입니다. 에크(ACK): 데이터가 성공적으로 수신되었음을 확인하는 플래그입니다.
2예상문제DDOS
방어자 입장에서 당할 수 잇는 공격 3가지
대역폭 소진 공격 (100g 라우터에 200g들어오면 null routing 이라고 버림 --> 이는 서비스의 가용성을 저하시킵니다.)
부분차단
70G공격이 100g router에 들어오면 라우터에서 차단을 하고 쓰레기통으로 버리고 남은 통신은 정상적으로 전달이 된다.
대역폭소진공격에서 가용대역폭을 초과하는 공격이 들어오게 될 경우, 예를들어 20g공간에 30g가 들어오게 되면 라우터는 이 과부하를 처리할 수 없어 일부 트래픽을 차단하게 됩니다.
방어방법
대역폭소진공격은 가용성을 가지고 있는 상단에서만 막을 수 있다. // 우리나라 관문체계에서는 대역폭 소지기반 대응이 다 들어가있다.
HTTP기반 공격 ( 클라이언트 ↔ 서버 관계에서)
HTTP 기반 공격은 클라이언트와 서버 간의 연결을 악용하여 서버의 자원을 소진시키거나 서비스 중단을 유발하는 공격
서버는 한 번에 처리할 수 있는 연결 수에 한계가 있습니다. 예를 들어, 초당 1,000번의 연결을 처리할 수 있는 서버가 있다고 가정할 때, 클라이언트가 초당 1,000번의 요청을 보내면 서버의 연결이 소진됩니다.
SYN Flood 공격:
공격자가 지속적으로 SYN 패킷을 전송하면 서버는 각 연결 요청에 대해 "SYN-ACK" 응답을 보냅니다. 이 과정에서 서버는 연결을 위한 리소스를 할당하게 되며, 이로 인해 서버의 자원이 고갈됩니다. 결국, 정상적인 클라이언트의 연결 요청을 처리할 수 없게 됩니다.
DDoS 공격:
공격자가 여러 클라이언트를 이용해 초당 하나씩 요청을 보내면, 서버의 연결 수를 소진시키는 DDoS(분산 서비스 거부) 공격이 발생할 수 있습니다. 이 경우, 공격자는 여러 IP 주소를 사용하여 서버의 자원을 고갈시키므로 방어가 더욱 어려워집니다.
3예상문제방어방법
시그니처 기반 방어:
공격 패턴에 대한 시그니처를 설정하고, 이를 기반으로 비정상적인 트래픽을 필터링합니다. 이러한 방법은 자동으로 공격을 탐지하고 차단할 수 있는 효과적인 방법입니다.
대피소 동작:
대피소와 같은 시스템을 구축하여 공격이 발생했을 때 자동으로 대처할 수 있는 체계를 마련합니다. 이 체계는 공격을 감지하고, 필요한 경우 트래픽을 차단하거나 우회시킵니다.
프록시 및 DNS 변경:
방어를 위해 프록시 서버를 사용하고 DNS를 변경하는 방법이 있습니다. 이를 통해 공격 트래픽을 다른 서버로 우회시키고, 공격자의 IP 주소가 직접 서버에 도달하지 않도록 할 수 있습니다.
재방문 횟수 카운트:
공격자의 재방문 횟수를 카운트하여, 일정 횟수 이상 접속하는 IP 주소를 차단합니다. 이를 통해 공격자를 식별하고 차단할 수 있습니다.
국지적 DDoS 대역폭 소진 공격
DDoS 공격은 여러 대의 컴퓨터(봇넷)를 이용하여 특정 서버나 네트워크를 대상으로 대량의 트래픽을 발생시켜 서비스의 정상적인 운영을 방해하는 공격입니다. 국지적 DDoS 공격은 특정 지역이나 특정 네트워크에 집중된 공격을 의미합니다. 대역폭 소진:
100메가의 대역폭을 가진 네트워크에서는 공격이 명확하게 보이지만, 백지망(예: 서버의 대역폭이 매우 높은 경우)에서는 상대적으로 덜 보일 수 있습니다.
패킷 흐름: 공격자가 자신의 IP 주소(a.b.c.d)를 소스 IP로 설정하고, 피해자의 IP 주소(5.4.3.2)를 목표로 하여 DNS 쿼리를 보냅니다. 이때 패킷의 소스 포트와 목적지 포트가 53번(DNS 포트)인 경우, 해당 트래픽이 의심스러운 것으로 간주되어야 합니다.
*소스 포트가 53번인 경우, 이는 DNS 서버가 클라이언트로부터의 쿼리에 대한 응답을 보내고 있다는 것을 의미합니다. 그러나 공격자가 자신의 IP 주소를 위조하여 이러한 패킷을 전송하는 경우, 정상적인 DNS 쿼리와는 다른 비정상적인 트래픽 패턴이 발생할 수 있습니다.
방어 방법
트래픽 모니터링: 비정상적인 트래픽 패턴을 모니터링하고, 특히 DNS 쿼리에 대한 비정상적인 요청을 감지합니다. 소스 포트와 목적지 포트가 53번인 경우, 이를 즉시 차단하거나 추가 검토를 요청할 수 있습니다.
오픈 DNS 서버 제한: 공개 DNS 서버가 악용되지 않도록 설정을 강화합니다. 오픈 리커시브 DNS 서버의 사용을 최소화하고, 필요한 경우 IP 주소 필터링을 적용하여 접근을 제한합니다.
대역폭 관리: 네트워크의 대역폭을 관리하고, DDoS 공격 발생 시 자동으로 트래픽을 차단하거나 우회시키는 시스템을 구축합니다.
신속한 대응 체계 구축: 공격 발생 시 신속하게 대응할 수 있는 체계를 마련합니다. 예를 들어, 특정 패턴의 트래픽을 감지했을 때 자동으로 차단하거나 경고를 발생시키는 시스템이 필요합니다.
tshark: Wireshark의 명령줄 기반 패킷 분석 도구입니다.
ngrep: ngrep는 네트워크 패킷을 필터링하고 분석하는 데 사용하는 도구입니다. 일반적으로 패킷을 실시간으로 캡처하고 특정 패턴을 찾아 출력합니다.
*TLS(Transport Layer Security)는 인터넷 상에서 데이터를 안전하게 전송하기 위한 암호화 프로토콜
(2) 주요통신기반시설 점검(기술)
1번문제 주요정보통신 기반시설을 점검할 수 있는 자 (아닌것은?)
한국인터넷진흥원 KISA
정보공유 분석센터,
정보보호 전문 서비스 기업(정보보호 전문 서비스 기업은 SK쉴더스를 포함 총 28기업이 있다.)
한국전자통신연구원
주요정보통신 기반시설로 지정이 되어 있는 장소는 1년에 한번 취약점 진단을 꼭 받아야한다
제17조(취약점 분석 및 평가 시기) → 지정 후 6개월 이내에 분석을 해야함, 매년 취약점 분석 평가를 실시해야한다.
과학기술정보통신부고시 제2021-103호:
** 법률은 선택사항이 아닌 의무사항이다.
---
2번문제보안위협에 대해 설명하고 이것을 제거하기 위해서 설정해야할 것은?
Session Timeout 설정 - 383
주기적으로 세션 체크를 해서 연결이 정상적인지 확인한다 .
Session Timeout 설정 (5분이하 권고)
Session Timeout 설정 유무를 점검하여터미널 접속 후 일정 시간(Session Timeout 지정 시간)이 지난 뒤 터미널 세션이 자동으로 종료되어 관리자의 부재(터미널 작업중 자리 비움, 작업 완료후 터미널 접속을종료하지 않 음) 시 발생 가능한비인가자의 터미널 접근 통제가 되는지 확인하기 위함
Session Timeout 정책이 적용되지 않았을 경우, 관리자 부재 시 비인가자가 네트워크 장비 터미널에 접속된컴퓨터를 통해 네트워크 장비의 정책 변경 및삭제 등의 행위를 할 수 있는 위험이 존재함
※Session Timeout:터미널 접속 후 유휴 상태 일 때 자동으로 터미널 접속을 종료하는 시간 설정
Community String의 권한은라이트 권한을 주어서는 안된다. (필요에 의해 사용을 할 수 있어도 기본적으로 라이트 권한은 안됌)
SNMP를 통해서 장비에 접근할 수있는 아이피를 제한한다.access list를 통해 제한한다.
※Community String:SNMP는 MIB라는 정보를 주고받기 위해 인증 과정에서일종의 비밀번호인 'Community String'을 사용함
---
4번문제스푸핑 방지를 위해 설정해야할 아이피 주소가 아닌것은? (객관식)- 397
■ 장비별 조치방법 예시 공통 특수 용도 주소 차단(RFC 6890 참조)
0.0.0.0/8 자체 네트워크(This host on this network, RFC1122)
10.0.0.0/8 사설 네트워크(Private-Use, RFC1918)
127.0.0.0/8 루프백(Loopback, RFC1122)
169.254.0.0/16 링크 로컬(Link Local, RFC3927)
172.16.0.0/12 사설 네트워크(Private-Use, RFC1918)
192.0.2.0/24 예제 등 문서에서 사용(TEST-NET-1, RFC5737)
192.168.0.0/16 사설 네트워크(Private-Use, RFC1918)
---
5번문제 Directed-broadcast 차단- 434 (단답형 주관식)
Directed-broadcast 서비스 차단을 통해 DoS 공격을 방지하기 위함
Directed broadcast는 특정 서브넷에 있는 모든 호스트에게 데이터를 전송하는 방식입니다
예를 들어, 서브넷 마스크가 255.255.255.0인 경우, 192.168.1.0/24 서브넷의 브로드캐스트 주소는 192.168.1.255입니다. 이 주소로 전송하면 서브넷 내의 모든 호스트가 메시지를 수신합니다.
Directed broadcast는 네트워크 공격에 악용될 수 있으므로, 많은 네트워크에서 기본적으로 비활성화되어 있습니다.
스머프 공격 은 브로드캐스트
※Smurf 공격: 인터넷 프로토콜(IP) 브로드캐스트나 기타 인터넷 운용 측면을 이용하여 인터넷망을 공격하는 행위로브로드캐스트에 대한 응답받을 IP 주소를 변조하여 해당 IP 주소 호스트에 DoS 공격을 감행하는 공격 기법
브로드캐스트 아이피 특징 :
그쪽으로 핑을 보내면 이 범위 안에 있는 호스트들에게 다 뿌린다.
그래서 스머프 공격이라는 것은 내가공격 대상자 소스 IP를 변조해서 브로드 캐스트 아이피로 핑을 보냄,
브로드캐스트 아이피가 같은 범위 안ㅇ ㅔ있는 호스트에게 request를 보냄
→ 이것을 받은호스트들이 공격 reply 를 공격자가 변조를 시킨 공격 대상 IP로 공격을 보냄
이것을 차단하기 위해서 차단해야 하는 항목은 무엇인가?
→다이렉트 브로드캐스트 차단.
(3)네트워크 구조 및 보안
1 bite = 2^8 = 0 ~ 255
7계층 : URL
4계층 : port 주소 (어느 프로그램에게 가야 하는지를 알려줌) (2 bite)
TCP/UDP : 전송 계층 프로토콜
TCP : 신뢰성 o - 말한대로 전달한다
UDP: 신뢰성 x - 말한대로 전달하지 않는다
3계층 : IP (4 bite)
URL을 입력하면, 먼저 DNS(Domain Name System)에 쿼리를 보내 해당 도메인의 IP 주소를 조회합니다.
DNS 서버는 해당 도메인에 대한 IP 주소를 반환합니다. 이 IP 주소가 목적지 IP가 됩니다.
1,2계층 : MAC (6bite)
게이트웨이(처음만나는 라우터)의 IP 주소는 알고 있고 있지만, 난 MAC 주소를 알고 싶기때문에
ARP를 사용해서 브로드캐스팅-> 해당 IP 주소를 가진 장치가 자신의 MAC 주소를 포함한 ARP 응답을 송신 장치에게 전송합니다.
ARP (Address resolution protocol) - IP를 MAC주소으로 변환
RARP - MAC주소를 IP으로 변환
Gateway: 우리 PC가 인터넷 세상으로 나가기 위해서 처음 만나는 라우터(별명)
routing table : 라우터를 키면 BGP protocol 을 이용해 routing table에 가는 길들을 다운받는다. 라우터는 포트가 4개가 있다.
subnet mask:네트워크에서 IP 주소를 서브넷으로 나누는 데 사용되는 값입니다 내 아이피 주소를 가지고 어디까지가 네트워크 주소인지를 판단할때 사용 ( 네트워크 주소와 호스트 주소 나눈 것을 판별하는 것)
broadcast : 네트워크에서특정 정보를 모든 장치에 동시에 전송하는 방식입니다.
unicast :한 사람의 특정 수신자에게만 데이터 패킷을 전송하는 방식
인터네트워킹
라우터: 네트워크를 연결하는 장비이며,일반적으로 3 네트워크 계층 기능을 수행
서브넷 마스크가 있기 떄문에 랜을 구별할 수 있다.
리피터: 반복한다 / 랜이 너무 커서 10km가 되면 랜인 회선으로 연결되어있는데 전기신호가 10키로 동안 계속 가는건 저항이 생긴다 떄문에 중간 중간 리피터(증폭기)를 설치를 한다. - 요즘은 사용하지 않음
브릿지: 랜을 버츄얼하게 나누고 싶을때 사용 / 라우터의 랜을 가상으로 한 포트당 몇개씩 버츄얼 하게 하기 위해서 랜선 하나 따서 그 밑에 여러개를 묶는 것 - 요즘은 라우터 값이 싸져서 사용하지 않음
랜에서 시작하여 첫번째로 만나는 라우터를 게이트웨이라고함
라우터 설명할때는 3계층 밖에 없다 - 왜냐면, 인터넷 상에 있는 라우터들은 최종 목적지가 아니기 떄문에 네트워크 계층에서 반환되고 다시 물리적 계층으로 내려간다 (목적지 아이피 주소가 나인지 아닌지만 확인함)
전송 (4계층) - 신뢰성 또는 통신품질에 대해 배울 예정
오류 제어
전송 오류의 유형
화자가 이야기 한 것에 대해 청자가 바르게 알아 들어야한다.
수신(청자) 호스트의 응답 프레임
긍정응답프레임: 데이터가 정상적으로 도착했을때, 수신 호스트가 송신 호스트에게 회신
부정응답프레임: 데이터가 꺠져서 도착했을떄, 수신 호스트가 송신 호스트에게 회신
(부정 응답 프레임을 받은 송신 호스트는재전송 기능으로 오류 복구 시도)
프레임 분실: 내가 말한 것이 통으로 없어진다. (저녁먹을래 → 저녁 … ? )
1) 송신호스트에서 프레임 분실
송신 호스트는타임아웃 시간을 갖고 상대방의 응답을 기다리는 시간이 있음 / 타임아웃 시간이 지날때까지 응답이 없으면 데이터를 재전송한다.
송신 호스트는 내가 말한 것을 상대방이 알아들었는지 못알아들었는지 판단이 가능하다. )
2) 수신호스트에서 프레임 분실
송신 호스트에서 데이터를 전송하고 “수신 호스트”에서 긍정 응답을 주는 와중에도 데이터 손실이 발생할 수 있다. → 그럼 송신 호스트에서 데이터를 재전송한다.
순서 번호 (sequence number)
대화의 순서번호를 저장을 해둬야한다.
송신호스트가 대화를 수신호스트에게 했는데, 수신호스트가 긍정응답을 하는 중 프레임분실이 일어난다면, 송신 호스트는 일정 시간 타임아웃을 주고 기다리다가 다시 재전송을 한다.
만약 순서번호가 없으면데이터의 중복이 발생한다. (금전적으로 보면 돈을 두번 보내는 꼴)
전송 오류의 유형
수신 호스트의 응답 프레임
부정 응답 프레임을 받은 송신 호스트는 재전송 기능으로오류 복구 시도
송신 호스트의 타이머 기능
데이터 분실시 수신호스트로부터 어떠한 응답프레임도 발생하지 않음 → 송신 호스트는 일정 시간동안 응답 프레임이 없으면타임아웃 기능으로 재전송을 시도
순서번호의 기능
수신호스트가 중복 프레임을 구분 할 수 있도록 지원
흐름제어
수신 호스트가감당할 수 있는 속도로 송신 호스트가 데이터를 전송하도록 제어를 해야한다.
너무 빨리 전송하는 경우
수신 호스트가 내부 버퍼에 보관하지 못할 수 있음 -> 이는 프레임 분실과 동일한 효과를 야기함
내가 상대방한테 데이터를 줄때 상대방이 받는 응답의 속도에 맞춰서 흐름 제어를 한다. (슬라이딩 윈도우 프로토콜)
1, 2 계층 프로토콜
CSMA/CD(Carrier Sense Multiple Access with Collision Detection)
이더넷=( LAN = MAC = 1,2 계층 = 물리적) 모두 같은말이다.
DummyHUB :인터넷을 공유한다 (BUS 구조로 되어있음)
스위칭HUB: 나만 연결한다 - > 속도가 더미허브에 비해 빠름
MA(Multiple Access):다수 호스트가 하나의 공유 매체에 연결됨
CS(Carrie Sense):호스트는 공유 매체의사용 가능 여부를 신호 감지로 확인
CD(Collision Detection):공유 매체에서데이터 충돌 여부 확인
공유매체(LAN)의 길이가 길면 길수록 전송 지연이 증가하여 충돌가능성이 높아진다.
--------
1,2 계층 = 프레임 (3 계층에서 내려온 데이터 + 헤더를 칭함)
3 계층 = 패킷 (4 계층에서 내려온 데이터 + 헤더를 칭함)
4 계층 = TCP 세그먼트 / UDP 데이터그램 (위에서 내려온 데이터 + 헤더를 칭함)
---------
1,2 계층 헤더 크기는 14byte
3계층 헤더 크기 20byte
4계층 헤드 크기 20byte
-------
0-1500바이트까지 데이터를 담을 수 있다
패킷의 최대사이즈 1500바이트 (그림에서 Data 부분)
패킷의 최대사이즈는 1500을 넘을 수 없다. 하지만 어느날 데이터가 1600이 되어 있으면 ‘비정상’적 이기 때문에 잡아내면 된다.
8비트 = 1바이트
헤더의 구성
목적지 맥주소 6byte + 소스 맥주소 6byte + type 2byte (length)
= 물리계층의 총 헤더의 길이는 14byte이다.
헤더 뒤에는 패킷이 따라옴
type(Length) 이 0x0800 (숫자 하나 하나가 16진수)이면 IP에게데이터를 줘야한다.
16진수는 2^4이기때문에 = 4비트이다.
‘영’ 4비트 ‘팔’4비트 ‘영’4비트 ‘영’4비트
8비트+ 8비트 = 2바이트
Type(Length): 내께 맞으면 데이터를 위로 올려야하는데 OS단에는 stack, IP .. 여러개가 있는데 누구한테 줘야하는지 정해준다. (포트 역할)
preamble:데이터가 가기 전에 미리 알려주는 것 = (수신 호스트가 송신 호스트의 블록 동기를 맞추는 용도)
start delimiter:1바이트 쉬고 데이터를 보내준다 =프레임의 시작
traller: LAN 카드는 OS에 영향을 받을 수 밖에 없는다OS에는 64비트, 32비트 설정하는게 있다. 이런것은 bus의 단위를 말함.CPU하고 죽은 기기를 통신할때 1비트씩 보내는게 아닌 64비트는 64를 한번에 보낸다.만약 버스가 있다고 하면 64의 배수가 되어야 한다. 그럼 데이터를 맞추기 위해PAD를 통해 0000000을 집어넣어 64틀에 딱 맞춰서보낸다.
checksum: 무결성값을 보낸다 //앞에서 계산한 checksum 과 뒤에서 계산한 checksum값을 비교한다. 값이 다르면 랜카드는 폐기를 한다.
3계층 네트워크 계층의 기능
서비스의 종류
연결형: 종이컵 2개에 실을 연결해서 대화를 하듯 연결을 하는 것
비연결형 서비스: 데이터나 경로가 미리 정해져있지않음 (데이터가 가는데 주소만 간다) - 주소만 가지고 가까운 길로 간다.
(비연결형 서비스)
패킷(데이터와 헤더가 합쳐짐)이 IP주소(네트워크계층이니까) 를 가지고서로 다른 경로로 전송되므로 도착 순서가 일정하지 않는다. ->그래서 상위 계층(4 전송계층)에서 순서를 재조정해야한다.
IP계층의 핵심목적은 정보가 깨지는 걸 신경쓰는게 아니라 빨리 보내는 것.
그렇기에, 패킷 분실 가능성이 있다
패킷의 100% 도착을 보장하지 않는다.
상위 계층에서 패킷 분실 오류를 복구해야한다.
IP 프로토콜
IP 프로토콜은 비연결형이다= 품질을 보장하지않는다 (쿠팡맨은 보내면 끝이고 상위계층 쿠팡에서 물건을 보상해줌)
MAC source address | MAC destination address | type(length) |패킷 (version number 4 + header length 5)
service type: 세팅값에 따라 어떤건 빠르고 어떤건 늦게 간다 (하지만 지금은 의미가 없어져서 사용하지 않는다) = 0 → 만약 숫자가 0이 아니고 1이라는 숫자가 하나라도 나오면 잡아내야함
Covert Channel Hacking 은밀한 채널 해킹: 모든 OS는 service type 이 안쓴다는 걸 알기 떄문에 해석을 하지 않음, 해석하면 속도가 느려지니까 → 해커들이 좀비pc 에 명령을 때려서 시그니처를 하는데, 데이터에 attack 명령어를 쓰는게 아니고 service type 에서 명령을 때린다. 왜냐?아무도 사용하지 않기 때문에 걸리지 않는다.
packet length(fragment offset) : 패킷의 최대 사이즈 1500 // 8바이트 단위로 계산한다.
Time to live: 패킷이 살아남기 위한 시간 // 예를들어 100으로 설정되어 있으면 라우터를 지날떄마다 하나씩 깐다 0이되면 소멸한다. - 쓰레기 패킷을 없애기 위함 (전송은 안되고 라우터끼리 핑퐁을 하는 등 ..)
transport: TCP 를 보낼지 IP를 보낼지 적어놓고 받는쪽에 배려를 한다는 의미. 윗계층 누구한테 줘야하는지를 적어놓음
header checksum:hash값으로 혹시나 의심스러울때 비교를 했는데 같으면 무결성 o같지 않으면 무결성에서 어긋나서 잡아내야함 //UDP 17 TCP 6
*UDP 17과 TCP 6은 각각 UDP와 TCP 프로토콜을 식별하는 프로토콜 번호입니다. 이 번호들은 IP 헤더에서 해당 프로토콜을 구분하는 데 사용됩니다.
scanner:내가 상대방을 공격하기 전에 상대방의 정보를 꺼내 오는 것( Nmap )
1기가를 전송하기 위한 패킷이 몇개가 팔요한가 ?
1기가 / 1500byte (패킷의 최대 사이즈)
하지만 헤더 20을 빼면 1480 만 한번에 전송될 수 있다 =
한번에 1기가를 받지 않고 1500byte씩 나눠서 받는 이유는 중간에 전송중 에러가 나면 1500만 다시 보내면 되지만 1기가로 보낼경우 1기가를 처음부터 다시 보내야한다.
identification:어디 데이터에서 왔는지 식별을 한다. A B C를 한번에 다운받는다고 가정을하면. A에서 쪼개고 B에서 쪼개서 전송되고하면 섞인다. 이것을식별하고 모으기 위한 장치
DF (Dont Fragment):분할하지 마라/ 있는 그대로 전송하면되고 분할하지 마라 (쪼개서오면 잡아내면된다)
fragmentation attack : 분할하지않아야 하는 것을 분할해서 하는 공격.
(패턴= rule = signiture = 침해사고 = 악성코드// 모두 같은 말)
정보보호 기술은 패턴매칭밖에 없다
V3 백신이 하는게 헤더와 데이터에 어택이 있으면, 어택 공격을 잡아내는 것 안잡히게 하려면 fragmentation을 해서 쪼개지 않아야 할 것을 강제로 쪼갬 → 보안장비를 속여 식별이 안됌 → 끝에 가면 헤더를 때고 합치기 떄문에 공격이 된다.
MF (More Fragment?) : 전송된 데이터가 완전히 다 들어왔는지 확인하는 장치 (내 뒤에 조각이 더 있나요? 하고 물어봄-조각이 더 있으면 1 이라고 답함 그리고 마지막에 more fragment의 응답은 0으로 끝난다.- 반드시 마지막은 0으로 끝나야한다.)
—---------------------- 문제 -----------------------
IP 프롤토콜
**분할의 예
IP 헤더를 제외한 전송 데이터의 크기가 380 바이트
패킷의 최대 크기가 128 바이트 일경우**
Identification : 우리가 설정하는 값
Packet length: 패킷의 최대크기 128바이트 에서 헤더 20을 떼고 봤을때 108바이트. Fragement Offset을 구하기 위해서는 8바이트로 나눠서 정수로 떨어져야 한다. 그래서 104 로 데이터 크기를 임의로 줄여 8바이트로 나눴을때 정수로 결과가 나오게 한다. (기존 108→104로 줄이면서 남은 값들은 모아서 맨뒤에서 처리할 예정)
104 + 헤더20 = 124 가 하나의 packet legnth(패킷 길이는 헤더값을 포함함) 값이 되는 것
최종적으로 124 / 124 / 124 / 88 이 나오는데 헤더크기 20을 각각 떼고 총 합을 더하면 데이터의 크기 380바이트로 데이터 전부 정상 전송하게 된다.
MF (more fragment) : 너 뒤에 더 있니? 있으면 1 마지막은 무조건 0 이되어야 한다.
Fragment Offset: 8바이트로 나눠져야함/ 패킷의 최대 크기 128바이트에서 헤더 20 떼고 108바이트에서 8로 나눴을때 정수로 떨어지게 하기 위해 104바이트로 줄임 → 이값을 8바이트 단위로 나누면 104/8 = 13
오프셋은 중첩이 되어 표에 작성된다. 13 / 26 / 39 … 데이터의 크기 380바이트가 모두 전송될때까지 늘어남
—
결과표
transport layer (전송 계층) (4계층)
데이터 링크 계층은 물리적으로 1:1 연결된 호스트 사이의 전송이라면,전송계층은 논리적으로 1:1 연결된 호스트 사이의 전송
흐름 제어
물리적 계층과 비교하여 상대적으로 복잡
수신자가슬라이딩 윈도우 프로토콜의 윈도우 하단 값을 조정
슬라이딩 윈도우 프로토콜은데이터 전송의 흐름을 제어하는 방법입니다. 이 프로토콜은 주로TCP(전송 제어 프로토콜)에서 사용되며, 송신자와 수신자 간의데이터 전송을 효율적으로 관리하기 위해 사용됩니다.
슬라이딩 윈도우 프로토콜의 기본 개념:
윈도우 크기: 슬라이딩 윈도우 프로토콜에서는 송신자가 한 번에 전송할 수 있는 데이터의 양을 "윈도우 크기"로 정의합니다. 이 윈도우 크기는 수신자가 처리할 수 있는 데이터의 양을 나타냅니다.
윈도우 하단 값: 윈도우 하단 값은 현재 수신자가 수신할 수 있는 데이터의 시작 지점을 나타냅니다.데이터가 수신되면 이 하단 값이 이동하여 새로운 데이터가 수신될 준비가 됩니다.
수신자가 윈도우 하단 값을 조정하는 이유: 수신자는 자신의 버퍼 크기 및 처리 능력에 따라 윈도우 하단 값을 조정합니다. 만약 수신자의 버퍼가 가득 차면, 수신자는 송신자에게 더 이상 데이터를 보내지 못하도록 하여 데이터 손실을 방지합니다.
오류 제어
데이터 변형, 데이터 분실 오류
재전송 기능으로 복구
빨리말하면 이해 못한다.
TCP 헤더 크기는 20이다.
1480 - 20 = 1460
TCP
연결형 서비스를 지원
전이증(쌍방향) 방식의 가상 회선을 제공
신뢰성 있는 데이터 전송을 보장
TCP 헤더
1층은 4byte
TCP 헤더 크기: 4 * 5층 = 20 byte
6층// padding 은 배수를 맞춰주기 위해 사용한다. // 마지막 층은 지금은 사용하지 않는다.(제외)
TCP, UDP (4계층)의 상위 계층은 7계층(응용프로그램) 이다.
포트번호
TCP, UDP 프로토콜이 상위 계층에 제공하는 주소 표현 방식
TLS (port 443)
SSL (port 20)
TLS(전송 계층 보안, Transport Layer Security)는 인터넷에서 데이터의 안전한 전송을 보장하기 위해 설계된 암호화 프로토콜입니다
Well-known 포트
많이 사용하는 인터넷 서비스에 고정된 포트 번호 할당
포트 숫자가 1024 보다 작으면모두 Well-known 포트이다. (전세계 통용)
Source port: 보내는 쪽의 포트 // 웹서버 포트는 port 80
Sequence Number: 3계층 네트워크 계층까지는 데이터만 빨리가면 되었지만,4계층에서는 데이터 전송의 신뢰성과 순서를 보장하는 데 필수적인 역할을 합니다.
Acknowlegement number: 말풍선 100개를 했는데 응답이 50번 까지만 받으면 100을 다 받기 위해 기다린다. 응답이 오지 않으면 51번 부터 다시 보낸다. -상대가 어디까지 받았는지를 확인하는 것
Data Offset(= headerLength 20byte)
Reserved: 앞으로 예약된 것이 있다. (요즘은 사용하지 않아서 0 값을 넣는다)
Flag 각 1비트 (1비트는 경우의 수가 2개)
URG(urgent) : 패킷을 빠르게 처리 할 수 있는 방법 ( urgent 라고 빨리 보낼 수있는 것이 요즘은 없기 떄문에 사용하지 않는다 비트번호 0 으로 처리)
ACK: SYN 에서 의견을 물어보고 ACK 에서 대답을 한다. 응답하면 okay sign 응답을 안보내면 no
PSH(push) : 해더 해석이 다 되었으면 상위계층으로 올릴때 사용
RST (reset): 급한일이 있을때 너랑 이야기 안하고 끝남 FIN은 1의 신호를 받아야끝나지만 이건 내가 통보하는 방식임
SYN: 0하고 1밖에 없다고 가정하면, 나는 너하고 이야기하고 싶어라고 신호 1(말풍선)을 던지는 의견을 물어봄
FIN (finish) :할말 다 끝나고 FIN을 1로 보내면 그 이후에 내가 어떤말을 하든 간에 듣지 못한다.
Window: 슬라이딩 윈도우 프로토콜과 같음 // 상대방이 초당 100 마디하면 난 능력이 안되 초당 50마디만 말해줘 라고 제어해주는 흐름제어장치
Checksum: 무결성을 확인하기 위함
Urgent Pointer: URG가 1이 되었을때 사용, 급한 일이 있을떄 사용하기 위함 // 요즘은 URG 를사용하지 않기 떄문에 비트번호가 0 이 되어야한다.
Sequence Number 는 정하기 나름 (보통 1로 시작)
Sequence number
ACK number : 다음에 수신하기를 원하는 데이터를 지정
6계층에서 내려온 것을 캡슐로 싸면 캡슐라이제이션
UDP - 8byte
비연결형 서비스를 제공
Best effort (빨리만 보내면 된다) 전달방식을 지원
실시간적 중요성을 하기 위해 생김 (헤더 처리가 없기 떄문)
신뢰성이 의미가 없을때 빨리 하기 위해서 사용
지금의 모든 것들은 TCP 를 사용한다.
지금 실시간 방송은 TCP 를 사용 // 엄밀히 따지만 실시간은 아니다 UDP를 사용해야함
ex) 프랑스에서 금메달 땃으면 바로 주는게 아니고 2~3초동안 데이터의 분실이 있나 확인하고 송출한다.
해커들이 명령어 때릴 떄는 UDP 를 사용한다 ( 응답을 받을 일이 없기 때문)
SYN Flooding
SYN Flood는 반개방 공격이라고도 하며, 보낸 SYN 요청에 대한 서버의 SYN-ACK에 응답하지 않고SYN 요청만 마구잡이로 보내는 네트워크 계층 공격입니다.결과적으로 많은 수의 열린 TCP Connection으로 인하여 서버의 리소스가 과도하게 소모되어 정상 트래픽의 처리를 어렵게하면서 정상적인 새로운 Connection을 열 수 없으며, 이미 연결된 사용자의 Connection의 경우에도 서버가 올바르게 작동하기 어렵게 됩니다.
(4) 웹 구조 및 보안
1번문제 GET POST 메소드
HTTP 프로토콜에서 클라이언트가 서버에 요청을 보내는 두 가지 방법
GET:
GET 요청은 서버에서 리소스를 가져오는 데 사용됩니다. 일반적으로 GET 요청은 본문이 필요하지 않습니다. 요청할 URL만으로도 충분히 서버가 어떤 리소스를 반환해야 하는지를 알 수 있습니다.
파라미터 값이 안보이게 숨겨져있음(어떤인자값이 날라가는지 보이지 않기 때문에 안전하다고 하지만 web proxy tool을 사용할 경우 전부 보이기 떄문에 공격자 입장에서는 GET과 POST는 의미가 없습니다.(글자수 제한이 없다서버적으로 보내야할 데이터가 많으면 POST사용)
-> ..// 이런식으로 두번 적으면 ./ 가 지워져도 ./ 한묶음이 남기 때문에 우회할 수 있다.
4번문제 Cross Site Script (CSRF) - client side
Cross Site Request Forgery, 웹사이트 취약점 공격의 하나로,사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격을 말한다.
ex) 회원 정보 수정, 데이터 수정 또는 삭제,비방/욕 댓글
- 해커의 악의적인 스크립트 게시글을 관리자가 읽으면 관리자 계정의 비밀번호가 해커가 설정한 비밀번호로 바뀔 수 있다.
- 클라이언트 사이드에서 계정정보를 바꾸는 공격 ->클라이언트의 정보가 목표,서버의 공격이 아니다.
해커가 아래 스크립트를 이용해 악의적인게시글(본문에 스크립트 삽입)을 작성한다.
관리자가 게시글을 읽으면 아래의 스크립트에서 설정한 것처럼 관리자 계정의 비밀번호가 12345 로 바뀐다.
Server Side Request Forgery (SSRF)- server side
SSRF는 Server Side Request Forgery의 약자로 유사한 이름을 가진 CSRF(Cross Site Request Forgery) 와는 다르게 클라이언트 측의 요청 을 변조시키는 것이 아닌 서버 측 자체의 요청을 변조하여 공격자가 원하는 형태의 악성 행위를 서버에 던져주면 서버가 검증 없이 그대로 받아 그의 따른 행동/응답을 해주는 공격
* 공격자가 내부망에 있는 서버를 접근 하기 위해서는 직접 접근은 불가 (방화벽, IDS, IPS …. 등) 보안장치가 많다. 심지어 해커(공인아이피)에서 server(사설아이피) 가 보이지도 않는다.
->중간에 있는 server의 취약점(매개체역할)을 통해 서버(사설 아이피)를 공격할 수 있다.
보안대책
내부 시스템과 상호 작용하는변수에 불필요한 값이 입력될 경우 무효처리를 해야 됨
변수에 입력된 주소가 올바른 주소가 맞는지 즉신뢰하는 주소가 맞는지 재검증을 해야 됨
실습에서 hacker.bug 가믿어도 되는 URL인지 확인할 수 있는 로직을 삽입해야한다.
접근할 수 있는 사이트만 접근할 수 있게하고 접근하면 안되는 사이트는 전부 거절 (화이트리스트)
정상적인 요청으로 공격하기 때문에 웹 방화벽에서 통제가 되지 않는다.
여러 우회 공격 기법 중 대상 사이트에 대한 신뢰할 수 있는 도메인과 루프백 주소를 매칭하여 지정해둔 도메인을 요청하는 경우가 존재하기 때문에 요청 시 도메인 이름에 대한 검증도 수행
정보보호 최고책임자는 대통령령에 의거 과기정통장관에게 보고해야하는데 -> 매출액, 회사 규모가 크면 안해도 됌(근데 시가총액큰애들은 겸직 금지임) -> 근데 정보보호 관련 업무는 또 겸직이 된대
정보보호 최고책임자는 다음 각 목의 업무를 총괄한다.
가. 정보보호 계획의 수립, 시행 및 개선
나. 정보보호 실태와 관행의 정기적 감사 및 개선
다. 정보보호 위험의 식별 평가 및 정보보호 대책 마련
라. 정보보호 교육과 모의 훈련 계획의 수립 및 시행
@@ 정보보호관리체계인증
이 사람들은 제1항에 따른 인증을 과기정통장관에게 받아야한대 - 근데 국제인증이나 정보보호조치를 취했으면 일정부분 생략이 된대
전기통신사업을 하는 양반
집적정보통신시설 하는 양반
정보통신서비스 부분 일정 수준 넘는 놈들
정보보호관리체계인증 유효기간은 3년 다만 정보보호 관리등급을 받은 경우, 유효기간동안 제1항의 인증을 받은 것으로 간주한다.,
이래놓고 장관 일 능률을 위해 인증기관을만들어서 (KISA) 인증심사를 정해놓고 대리맡긴다네
인증기관들은 연 1회이상 사후관리를 실시하고 장관한테 보고해야한대 (KISA, 정보보호관리체계인증기관(SK쉴더스), 정보보호관리체계심사기관
장관은 정보보호관리체계인증 취소가 가능한데, 거짓, 인증기준미달, 사후관리 거부를 하면 취소한대
@@ 개인정보보호법
개인의 자유와 권리를 보호하고, 나아가 개인의 존엄과 가치를 구현
개인정보 -> 살아있는 개인의 정보
개인을 알아볼 수 있는정보
성명, 주민번호, 영상
결합하여 알아볼 수 있는 정보
가명정보 (가명처리: 개인정보 일부를 삭제해서 추가 정보 없이 개인을 알아볼 수 없음)
정보주체 권리 (처리에 관한 정보제공받을권리, 동의 여부 선택권리, 개인정보 열람권리, 처리정지,파기요구권리, 처리로인한 피해 구제받을 권리, 결정거부 및 설명요구 권리
@@정보 수집 및 이용
정보주체의 동의를 받거나 법령 또는 생명,재산 등 불가피한 경우, 개인정보처리자의 정당한 이익달성을 위한경우
정보 동의를 받을 때 정보주체에게 알려야할 목록
수집 이용목적
수집하려는 개인정보 항목
개인정보 보유 및 이용기간
동의 거부 권리 및 동의거부에 따른 불이익 내용
개인정보처리자는 정보주체의 개인정보를 제3자에게 제공할 수 있다. - 동의받았을때, + 대통령령으로 정하는 바에 따라 정보주체 동의없이 개인정보를 제공할 수 있다.
@@가명정보
개인정보처리자는 정보주체의 동의없이 가명정보를 처리할 수 있다.
3자에 제공하는 경우 특정 개인을 알아볼 수 있는 정보를 포함해서는 안된다.
연구를 위한 가명 개인정보처리자들의 통합은 전문기관에서만 수행한다.
개인정보처리자는 가명정보를 처리하고자하는 경우 / 가명정보처리목적, 제3자 제공시 제공받는 자, 가명정보의 처리기간 등 관련 기록을 보관해야하고 가명정보를 파기한 경우 파기날부터 3년 이상 보관하여야한다.
@@유출신고
개인정보처리자는 개인정보가 유출되면 정보주체에게 알려야한다.
유출항목
시점과 경위
발생할 수 있는 피해를 최소화하기 위한 정보주체가 할 수 있는 방법에 대한 정보
대응조치 및 피해 구제절차
피해가 발생할 경우 신고 등을 접수할 수 있는 담당부서 및 연락처
개인정보처리자는 개인정보 유출을 알게 되었을 경우 72시간내에 서면등의 방법으로 전문기관(KISA)에 신고해야한다. , 천재지변시는 그 이후 신고해야함 / 정보주체 권익 침해 가능성이 자체조사에서 낮아졌다고 판단하면 신고 안해도됌
@@ 개인정보보호책임자
개인정보처리자는 개인정보보호책임자를 임명해야함
보호 계획의 수립 및 시행
처리실태 및 관행의 정기적 조사 및 개선
개인정보처리관련 불만의 처리 및 피해구제
유출 및 남용방지를 위한 내부통제시스템 구축
개인정보보호 교육계획의 수립 및 시행
관리 감독
해외 법인회사들은 개인정보 처리에 관한 국내대리인을 문서로 지정해야한다.
개인정보 보호책임자의 업무
개인정보 유출 등의 통지 및신고
물품 서류등 자료의 제출 (국내 대리인은 국내 영업소가 있어야함)
국내 대리인 성명, 주소(영업점), 전화번호 및 전자우편주소
국내대리인이 법을 위반한 경우 개인정보처리자가 그 행위를 한 것으로 본다.
(6) 시스템 보안 및 취약점 진단
Assembly 기계어와 일대일로 대응이 되는 컴퓨터 언어
레지스터 : CPU내에 존재하는 기억장치로 메모리 외 빠른 데이터 저장 및 읽기가 가능한 장치
범용레지스터: 연산 결과 저장, 산술 논리 연산, 주소 저장 등 다목적으로 사용
인덱스레지스터: 메모리 내 데이터 접근 시 주소를 가리킬 때 사용
RIP는 "Instruction Pointer"의 약자로, 현재 실행 중인 명령어의 주소를 가리키는 레지스터
fastcall : 레지스터에 사용할 인자를 적어서 사용한다
PUSH: 스택에 데이터를 추가하는 연산.
POP: 스택에서 데이터를 제거하고 반환하는 연산.
ESP: 스택의 최상위(top)를 가리키며, 함수 호출 및 리턴, 변수 저장 및 로드 시에 사용됩니다.
EBP: 스택의 최하위(bottom) 또는 함수의 스택 프레임의 기준 지점을 가리키며, 함수의 로컬 변수나 인수에 접근할 때 기준이 됩니다.
LEA
메모리 주소를 계산하여 레지스터에 로드하는 데 사용되는 어셈블리 언어의 중요한 명령어입니다.
이를 통해 복잡한 주소 계산을 간편하게 수행, 포인터 연산이나 배열 처리에 유용합니다.
(두줄로 적어야 할 코드를 LEA 를 사용하면 한줄에 요약해서 적을 수 있다.)
1번문제 Canary
스택 오버플로우 보호 완화 기법(mitigation)
함수 호출 시 카나리 값을 스택 프레임의 최상단에 저장, 함수 종료 시 스택 오버플로우를 검사
Master Canary
로컬 카나리는함수 종료 시 검사를 위해 마스터 카나리와 비교->값이 다르면 스택오버플로우가 발생했다고 판단하고 프로그램을 비정상 종료시킴(stack smashing detected error 발생)
일반적으로마스터 카나리는 전역 공간에 저장되나쓰레드에서는 마스터 카나리가 스택 영역에 저장
그렇다면 카나리를우회하는 법이 있을까?
만약 카나리의 값과 마스터카나리값을 동일한 문자로 덮어버린다면 우회할 수 있다.
2번문제 ROP (Return Oriented Programming) 공격은 어떨때 사용가능한가
ROP는 주로 실행 방지 메커니즘(NX 비트 등)을 우회하기 위해 사용됩니다. 이 기술은악의적인 코드를 직접 삽입하는 대신,기존의 실행 가능한 코드 조각(“gadget”)을 사용하여 원하는 동작을 수행합니다. - 버퍼오버플로우 취약점 이용
스택 주소는 실행 할 수가 없는데 코드영역은 CPU가 실행시켜야 할 코드가 들어가있으니 리턴할떄 쉘코드를 스택에 쓰고 스택으로가는게 아니라 코드영역으로 가면 어떨까 하는것
Idea: 바이너리에 존재하는 코드를 재활용
“Gadget”: pop rdi ; pop rsi ; ret
스택을 공격자가 조작한 입력으로 overwrite
“gadget”을 연결해 프로그램 실행 흐름 조작
3번문제Use After Free
•Dangling pointer: 해제된 영역의 포인터를 가리키고 있는 포인터
•해제된 영역의 포인터를 계속 들고 읽을 수 있다면?
댕글링포인터와 관련이 있다.
이미 해제된 포인터인데 그 값을 계속해서 가지고 있기 때문에 1번으로 다시 읽어도 읽을 수 있는데 심지어 1번에 새드가 저장되어있고 2번해도 새드가 잘 나온다.
4번문제 Seccomp
프로세스가 사용할 수 있는 시스템 콜을 제한하는 샌드박스 보안 기능
(메모리보호기능은 아니고 샌드박스 보안기능임)
리눅스 커널 샌드박스 보안 기능
프로그램을보호된 영역에서 동작해 시스템이 조작되는 것을 방지
프로세스가 사용할 수 있는 시스템 콜을 제한
5번문제 Timing-based Side Channel Attack
한문자열씩비교하면서 값이 다르면 프로그램 종료, 값이 같으면 기다리게 만듬 -> 타임아웃을 통해 flag 검출한다 / 시간이 오래걸리면 첫 문자열이 f 겠구나 하고 체크하고 넘어갈 수있음 (시간의 차를 기반으로 플래그를 읽어내려고 함)
실행시간을 비교한다
정상적일떄는
같은값이면 계속 본다.
정상작동하는지 시간을 비교한다.
(7) 리눅스 기초
1번문제 ARP
IP 네트워크 주소를 데이터 링크 프로토콜에서 사용하는 하드웨어 주소(Mac addr) 에 매핑하기 위해 인터넷 프로토콜 에서 사용하는 프로토콜입니다
ping 10.0.2.17 (목적지 아이피주소)
나의 IP 주소 10.0.2.15
목적지 IP 주소 10.0.2.17
출발지 MAC주소는 (나의 MAC주소)
내부망에 있는 10.0.2.17 에게 ICMP 패킷을 전송한다는 말
패킷전송을 하려면 목적지 MAC 주소가 필요하다. → 어떻게 알아내냐면 ARP 브로드캐스트 를뿌려서 알아낸다. (누가 10.0.2.17을 가지고 있어? whohas)
2번문제 top의 CPU 점유율
3번문제 free명령어결과설명
리눅스에서 free 명령어는 시스템의 메모리 사용 현황을 보여줍니다. 주로 다음과 같은 정보를 제공합니다:
total: 총 메모리 용량.
used: 사용 중인 메모리 양.
free: 사용 가능한 메모리 양.
shared: 여러 프로세스 간에 공유되는 메모리 양.
buff/cache: 파일 시스템 캐시와 버퍼에 사용되는 메모리 양.
available: 현재 유저 프로세스가 사용할 수 있는 메모리 양.
Available 메모리: 사용 가능한 메모리 양을 나타내며, 유저 프로세스가 사용할 수 있는 메모리의 추정치입니다. 이는 free, buff/cache에서 시스템 예약 메모리를 빼서 계산됩니다. 따라서 free 메모리가 많더라도, 실제 사용 가능한 메모리는 더 적을 수 있습니다.
4번문제 Buffered I/O
Direct I/O vs Buffered I/O
Direct I/O : CPU가 DISK 로 바로 때리는 방식
Buffered I/O : CPU가 DRAM 을 거치고 DISK 를 가는 방식 ( DRAM에 자주 access 하는 게 메모리에 남겨져 있어서 buffered 가 direct보다 빠르다
Buffered I/O: 파일 입출력을 할 때,데이터를 직접 디스크에 쓰지 않고 메모리에 버퍼를 사용하여 효율적으로 처리합니다. 이 과정에서 페이지 캐시를 활용하여 성능을 향상시킵니다.
5번문제 시스템 이벤트 두가지
인터럽트: 하드웨어나 소프트웨어가 CPU의 작업을 중단하고 이벤트를 처리하도록 하는 신호입니다.
타이머 인터럽트: 주기적으로 발생하여 프로세스 스케줄링 등을 수행합니다.
네트워크 인터럽트: 네트워크 패킷 수신 시 발생합니다.
예외: 특정 이벤트가 발생했을 때 처리하는 메커니즘입니다.
시스템 호출 (syscall): 사용자 공간에서 커널 공간으로 요청을 전달하는 방법입니다.
페이지 폴트 (page fault): 요청된 페이지가 메모리에 존재하지 않을 때 발생하며, 페이지를 메모리에 로드하는 과정이 필요합니다.
네트워크 한번에 이해하자
응용프로그램
L7 : URL
—-
전송
L4 : port, TCP(연결형)/UDP(비연결형) (세그먼트) 헤더 크기 20byte
전송오류, 긍정응답,부정응답프레임, 프레임분실 -> 순서 번호, 흐름제어(상대방한테 데이터를 줄때 상대방이 받는 응답의 속도에 맞춰서 흐름 제어를 한다. (슬라이딩 윈도우 프로토콜))
슬라이딩 윈도우 프로토콜
윈도우 크기: 송신자가 한 번에 전송할 수 있는 데이터의 양을
윈도우 하단 값 : 현재 수신자가 수신할 수 있는 데이터의 시작 지점
수신자가 윈도우 하단 값을 조정하는 이유:
수신자는 자신의 버퍼 크기 및 처리 능력에 따라 윈도우 하단 값을 조정합니다. 만약 수신자의 버퍼가 가득 차면, 수신자는 송신자에게 더 이상 데이터를 보내지 못하도록 하여 데이터 손실을 방지합니다.
TLS(전송 계층 보안, Transport Layer Security)는 인터넷에서 데이터의 안전한 전송을 보장하기 위해 설계된 암호화 프로토콜
포트 숫자가 1024 보다 작으면 모두 Well-known 포트
UDP(비연결형) - 신뢰성이 의미가 없을때 빨리 하기 위해서 사용
3way handshake(전송계층에서 일어남) -> SYN Flooding 공격 (SYN만 마구잡이로 보냄 서버의 리소스가 과도하게 소모되어 정상 트래픽의 처리를 어렵게함)
—-
네트워크 (패킷) 헤더 크기 20byte
L3 : IP / BGP Hijacking - 네트워크 경로를 악의적으로 변경하여 트래픽을 가로채는 공격
패킷의 최대사이즈는 1500
1기가 / 1500byte (패킷의 최대 사이즈)
하지만 헤더 20을 빼면 1480 만 한번에 전송될 수 있다
—
물리, 데이터링크 (이더넷 =( LAN = MAC = 1,2 계층 = 물리적), 프레임, 헤더 크기는 14byte
L1,2 : MAC / ARP spoofing - 네트워크에서 ARP를 조작하여 데이터 전송을 가로채는 방식
—-
Smurf 공격 : 브로드캐스트 응답받을 IP 주소를 변조하여 공격대상자 IP 주소에 보내게 만들어 Dos공격을 하는 기법
BGP : AS(자율 시스템) 간에 라우팅 정보를 교환하는 프로토콜
BGP Hijacking : 네트워크 경로를 악의적으로 변경하여 트래픽을 가로채는 공격
ROP (Return Oriented Programming) 공격: 악의적인 코드를 직접 삽입하는 대신, 기존의 실행 가능한 코드 조각(“gadget”)을 사용하여 원하는 동작을 수행 - 버퍼오버플로우 취약점 이용
리눅스 실체 → c코드 → 10만개 / proc/kallsyms → 300~400개 → 시스템콜(open, read, write) 컴파일해서 결과물은 vmlinux(가상메모리 메커니즘을 지원)으로 나온다.
가상메모리 메커니즘의 배경이 될 수 있는 ABI (application binary interface) 바이너리를 만들때 규약, 규칙을 만드는데 OS,CPU,컴파일러가 규칙을 만들어서 ELF, syscall number(함수호출규약- 여러가지 레지스터를 어떻게 사용할건지), calling convension, 가상메모리 매커니즘
컴파일러
PA 기반 컴파일러 입장에서는 물리주소로 컴파일하면 실행이 한정적이다.
VA 기반 컴파일하면 어디서든 실행이 된다.
실행하게 되면 OS가 프로세스를 실행하면서 자료구조 task_stuct 를 만들고 거기 딸려있는
mm_struct(text, heap, stack vma 를 만듬) - 이런 것들을 확인할 수 있는 방법 /proc/[PID]/maps (가상주소 기록만 함) 를 통해서 확인가능
VA-PA매핑, 변환테이블(페이지 테이블)이고 기본적으로 깡통으로 둬서 후매핑 방식으로 사용 - ps -eo pid,comm,vsz,rss | head -2 를 통해서 확인가능
OS준비하고 CPU가 VA 를 통해 CPU 내부에 있는 MMU에게 준다 이것은 현재 페이지테이블을 찾아서 VA-PA 변환시도를 한다. 변환실패하면 MMU 를 통해 pagefault 를 통해 예외처리로 페이지 폴트 핸들링을 한다.
페이지 폴트 핸들링
페이지폴드 핸들링(VA검사를 통해 유효한지 mm_struct 사용해서 확인하고 유효하지 않다고 판단되면 segfault
huge page 설정이 되어있다면 512개를 한번에 할당할 수 있다. // VA-PA 매핑 기록을 페이지 테이블에 기록한다.
결론적으로 컴파일러는전세계있는 PA를 모르기떄문에 VA 기반으로 한번 컴파일하면 알아서 변환해서 써라고 OS, CPU 에게 던져주는 구조이다.
던져주면 OS 는 mm_struct, page table을 준비하고 CPU는 MMU를 통해서 변환을 제어하고, 변환에 대한 이벤트가 발생하면 OS 수습 → CPU
구성
core
PM 프로세스 관리 → task_struct 를 사용한다 CFS 스케쥴러(virtual run time 이라고해서 최소값을 선택하는 방식
MM 메모리관리 → mm_struct(vma, vma, vma … / 페이지 테이블(VA-PA) / 시스템 이벤트 핸들러 : 인터럽트: 네트워크, USB, 타이머 // 예외처리 : syscall , pagefault 부팅한 이후에는 숨쉬듯 계속 발생해서 예외처리를 해야함
결국 이벤트핸들러는 우렁각시 같은 것이고 주인공은 nginx, mysql 같은게 주인공이다. 그래서 메모리를 계속 물고 있으면 안된다 → 그래서 탄생한게 TH( top half : 전반부), BH (bottom half: 후반부 작업(나중에 호출해도 되는 커널, 함수 미루기 - 대표적으로 workqueue(다양하게 계층적으로 처리 (kworker), softirq (8개의 함수밖에 못미뤄서 유연성 떨어짐 - ksoftirqd), tasklet(유연성은 있지만 큐가 2개밖에 없음) )
I/O
네트워크
L4 TCP
L3: IP,netfilter(iptables 명령어를 제어하고, 블랙리스트, 화이트리스트, 디도스 공격 등을 제어가능 아이피 대역에 대한 관리)
L2:MAC
디스크 (VFS, FS, Block FS) //
파일시스템: 디스크 블록을 어떻게 read/write할지 전략, 규칙을 세우는 것 (대표적으로 ext4, xfs, f2fs, btrfs)
R / D(Disk sleep = Disk I/O 처리가 늦어지고 있다는 말) 상태의 프로세스가 많을때
wa 가 높아지는경우 → I/O 기다리는 시간이 길어진다.
used : heap, stack 처럼 순수메모리 사용량 (Anonymous)
free : 미사용공간
buff/cache : 디스크 블록을 임시적으로 저장해두는용도 (Pagecache 용도)
buff/cache 비우기
echo 3 › /proc/sys/vm/drop_caches
drop_caches 를 했는데 왜 buff/cache 가 남아있는가? -> 현재 돌아가고 있는 프로세스들이 있다. 아래의 명령어를 통해 실행중인 프로세스 확인 가능
ps -ef | wc -l
Buffered I/O: 파일 입출력을 할 때, 데이터를 직접 디스크에 쓰지 않고 메모리에 버퍼를 사용하여 효율적으로 처리합니다. 이 과정에서 페이지 캐시를 활용하여 성능을 향상시킵니다.
Dirty 페이지: 메모리에서 수정된 데이터(Dirty 페이지)는 디스크와 동기화되지 않은 상태입니다. 이러한 페이지는 주기적으로 디스크에 기록되며, 이 과정을 "writeback"이라고 합니다. 기본적으로 5초마다 수행됩니다.
Available 메모리: 사용 가능한 메모리 양을 나타내며, 유저 프로세스가 사용할 수 있는 메모리의 추정치입니다. 이는 free, buff/cache에서 시스템 예약 메모리를 빼서 계산됩니다. 따라서 free 메모리가 많더라도, 실제 사용 가능한 메모리는 더 적을 수 있습니다.
메모리 관리: 시스템의 메모리 상태를 지속적으로 모니터링하고 관리하는 것이 중요합니다. available 수치가 낮으면 성능 저하를 초래할 수 있으므로, 필요 시 프로세스를 종료하거나, 메모리 사용을 최적화하는 방안을 고려해야 합니다.
Direct I/O vs Buffered I/O
Direct I/O : CPU가 DISK 로 바로 때리는 방식
Buffered I/O : CPU가 DRAM 을 거치고 DISK 를 가는 방식 ( DRAM에 자주 access 하는 게 메모리에 남겨져 있어서 buffered 가 direct보다 빠르다.
네트워크 패킷 전송 과정:
목적지 IP 주소 필요 → 나의 IP 주소192.168.0.12 , 서브넷마스크를 통해 외부망 안에 포함되는지 내부망에 포함되는지 확인을 한다.
192.168.0.15 내부망일 경우 → ARP 브로드캐스트 → ARP 통해서 whohas 192.168.0.15 를 누가 가지고 있는지에 대한 패킷을 뿌림 → ARP → 192.168.0.15의 MAC 주소를 획득 → ARP 테이블에 저장
8.8.8.8 → 외부망인걸 확인 → ARP 브로드캐스트 → ARP 누가 게이트웨이인지에 대한 내용의 패킷을 뿌림 → ARP → 게이트웨이의 MAC 주소를 획득한다.
ICMP L3(네트워크 계층) 통신
DNS
TCP
4 way handshake
HTTP GET 요청(패킷 1개) / 응답(패킷 1개) 라면
총 몇개의 패킷을 주고 받은걸까
3개(3way hand) + 2개(connection) + 4개 (4way hand) = 9개
ARP broadcast
ping 10.0.2.17 (목적지 아이피주소)
나의 IP 주소 10.0.2.15
목적지 IP 주소 10.0.2.17
출발지 MAC주소는 (나의 MAC주소)
내부망에 있는 10.0.2.17 에게 ICMP 패킷을 전송한다는 말
패킷전송을 하려면 목적지 MAC 주소가 필요하다. → 어떻게 알아내냐면 ARP 브로드캐스트 를뿌려서 알아낸다. (누가 10.0.2.17을 가지고 있어? whohas)
리눅스는 다양한 응용 프로그램을 실행하고 관리하는 역할을 합니다. 프로세스의 생성, 스케줄링, 종료 등을 통해 여러 응용 프로그램이 효율적으로 자원을 사용할 수 있도록 합니다.
하드웨어 관리 (Hardware Management)
CPU, RAM, 디스크, 네트워크 장치 등 하드웨어 리소스를 관리합니다. 이를 통해 시스템 자원의 효율적인 사용과 안정성을 보장합니다.
리눅스의 물리적 실체
리눅스 커널은 C 코드로 작성되어 있으며, 컴파일을 통해vmlinux라는 실행 파일로 변환됩니다. 이 커널은 약 10만 개의 함수로 구성되어 있으며, 그 중 300~400개는 사용자 호출이 가능한 시스템 콜로 제공됩니다. 예를 들어,open,read,write등의 시스템 콜이 있습니다.
바이너리 실행 파일 및 ABI
리눅스에서 실행되는 바이너리 파일은 ELF(Executable and Linkable Format) 형식을 따릅니다. ABI(Application Binary Interface)는 운영체제, CPU, 컴파일러 간의 규칙과 규약을 정의합니다. ABI를 준수하면, 소스 코드를 한 번만 컴파일하더라도 여러 시스템에서 재컴파일 없이 실행할 수 있습니다.
.
ABI는 소프트웨어와 하드웨어 간의 상호작용을 정의하는 중요한 규칙 세트로, ELF 파일 형식, 시스템 호출 번호, 호출 규약, 가상 메모리 매커니즘 등을 포함하여 다양한 컴포넌트를 통해 운영체제와 응용 프로그램 간의 호환성을 보장합니다. 이를 통해 개발자는 다양한 환경에서 소프트웨어를 효과적으로 개발하고 배포할 수 있습니다.
메모리 관리
소스 코드는 물리적 메모리 주소 기반으로 컴파일되지만, 실제 실행 시에는 가상 주소(VA)가 사용됩니다. 이때, OS와 CPU는 VA를 물리적 주소(PA)로 변환하여 메모리를 관리합니다.
OS는 프로세스를 실행할 때 task_struct와 mm_struct를 사용하여 각 프로세스의 가상 주소 공간을 기록합니다. 이 구조체는 가상 메모리 영역(VMA)을 관리합니다.
페이지 테이블 및 MMU
CPU 내부의 MMU(Memory Management Unit)는 가상 주소를 물리적 주소로 변환하는 역할을 합니다. 만약 현재 프로세스의 페이지 테이블에 해당 VA가 존재하지 않는 경우, 페이지 폴트(page fault) 예외가 발생합니다. 이는 필요한 페이지를 메모리에서 로드하거나, 다른 처리를 통해 해결해야 함을 의미합니다.
리눅스는 후매핑 방식을 사용하여 필요한 페이지가 실제로 사용될 때까지 물리 메모리에 로드하지 않습니다. 즉, 프로세스가 특정 메모리 페이지에 접근하려 할 때, 해당 페이지가 메모리에 존재하지 않으면 페이지 폴트가 발생합니다.
pagefault는 프로세스가 접근하려는 가상 주소가 물리 메모리에 존재하지 않을 때 발생합니다. 이 경우, OS는 해당 VA가 유효하지 않음을 확인하고 페이지를 디스크에서 로드하여 페이지 테이블을 업데이트합니다. 페이지 크기는 일반적으로 4KB이며, 페이지 테이블은 VA와 PA 간의 연결을 관리하여 메모리 접근을 효율적으로 수행합니다. 이 모든 과정은 가상 메모리 시스템의 핵심적인 부분으로, 프로세스가 메모리를 안전하고 효율적으로 사용할 수 있도록 돕습니다.
*페이지 크기: 4KB,4096,0x1000, 12bit, 2^12
1. CPU와 MMU의 상호작용
CPU는 실행 중인 프로그램의 명령어를 처리하며, 메모리에 접근할 때 가상 주소(VA)를 사용합니다.
**MMU (Memory Management Unit)**는 CPU가 요청한 가상 주소를 물리 주소(PA)로 변환하는 역할을 합니다. MMU는 페이지 테이블을 참조하여 VA의 유효성을 검사하고, 해당하는 PA를 획득합니다.
2. 메모리 접근 과정
CPU가 메모리에 접근할 때, 다음 과정이 일어납니다:
CPU가 MMU에 가상 주소를 전달합니다.
MMU는 페이지 테이블을 조회하여 VA에 해당하는 PA를 찾습니다.
PA가 결정되면, MMU는 이 주소를 CPU에 반환합니다.
3. 캐시 계층
PA가 획득되면, 다음 단계는 캐시 메모리입니다:
캐시 컨트롤러는 PA를 기반으로 캐시 메모리(SRAM L1, L2, L3)에 접근합니다.
만약 요청한 데이터가 캐시에 없다면, "cache miss"가 발생합니다.
이 경우, **메모리 컨트롤러(MC)**는 DRAM에서 데이터를 가져와야 합니다.
4. Huge Page
Huge Page는 메모리 관리에서 더 큰 페이지 크기를 사용하는 방식입니다. 예를 들어, 4KB 페이지를 512개 사용하여 2MB의 메모리를 할당할 수 있습니다. Huge Page는 페이지 테이블의 크기를 줄이고 TLB(Translation Lookaside Buffer)의 효율성을 높여 성능을 개선합니다.
5. 프로세스 및 쓰레드 구조
프로세스가 생성될 때,test_struct와 같은 구조체가 만들어집니다. 이 구조체는 프로세스의 정보와 상태를 담고 있습니다.
각 쓰레드는task_struct를 사용하여 관리됩니다. 이 구조체는 쓰레드의 실행 정보 및 상태를 포함합니다.
하지만 여러 쓰레드가 동일한 프로세스 내에서 실행될 때, 메모리 관리 구조체인mm_struct를 공유합니다. 이는 모든 쓰레드가 동일한 가상 메모리 공간을 사용하게 함으로써 효율적인 메모리 관리를 가능하게 합니다.
*쓰레드(Thread)는 프로세스 내에서 실행되는 가장 작은 단위로, 프로세스가 수행하는 작업의 흐름을 나타냅니다. 쓰레드는 프로세스의 자원을 공유하며 독립적으로 실행될 수 있습니다. 여러 쓰레드가 동시에 실행됨으로써 멀티태스킹을 구현할 수 있으며, 이를 통해 프로그램의 성능을 향상시킬 수 있습니다.
1. 프로세스 관리 (PM)
프로세스 관리는 운영체제가 프로세스의 생성, 스케줄링, 종료 등을 관리하는 기능입니다.
task_struct: 각 프로세스에 대한 정보를 담고 있는 구조체로, 프로세스 ID, 상태, 우선순위, 스케줄링 정보 등을 포함합니다.
CFS (Completely Fair Scheduler): Linux의 기본 스케줄러로, 프로세스의 CPU 시간을 공정하게 분배하는 알고리즘입니다. 각 프로세스의 가상 실행 시간을 기반으로 스케줄링을 수행합니다.
2. 메모리 관리 (MM)
가상 메모리 관리: 프로세스가 사용하는 가상 주소 공간을 관리합니다.mm_struct는 가상 메모리 영역(VMA)을 정의하며, 여기에는 스택, 힙, 텍스트 영역이 포함됩니다.
Stack VMA: 함수 호출 시 사용하는 스택 메모리 영역.
Heap VMA: 동적 메모리 할당을 위한 힙 메모리 영역.
Text VMA: 실행 코드가 위치하는 영역.
VA-PA 매핑 테이블: 가상 주소를 물리 주소로 변환하기 위한 페이지 테이블을 포함합니다.
물리 메모리 관리:
버디 시스템: 메모리 할당을 효율적으로 관리하는 방법으로, 메모리를 2의 거듭제곱 크기로 분할하여 관리합니다.
페이지 조각 관리: 4KB 크기의 페이지를 기본 단위로 하여 메모리를 관리합니다.
3. 시스템 이벤트
인터럽트: 하드웨어나 소프트웨어가 CPU의 작업을 중단하고 이벤트를 처리하도록 하는 신호입니다.
타이머 인터럽트: 주기적으로 발생하여 프로세스 스케줄링 등을 수행합니다.
네트워크 인터럽트: 네트워크 패킷 수신 시 발생합니다.
예외: 특정 이벤트가 발생했을 때 처리하는 메커니즘입니다.
시스템 호출 (syscall): 사용자 공간에서 커널 공간으로 요청을 전달하는 방법입니다.
페이지 폴트 (page fault): 요청된 페이지가 메모리에 존재하지 않을 때 발생하며, 페이지를 메모리에 로드하는 과정이 필요합니다.
4. I/O 관리
네트워크:
L4 (TCP): 전송 계층 프로토콜로 데이터 전송을 담당합니다.
L3 (IP): 네트워크 계층 프로토콜로 패킷의 라우팅을 담당합니다.
Netfilter (iptables): 패킷 필터링 및 네트워크 주소 변환(NAT)을 위한 프레임워크입니다.
L2 (MAC): 데이터 링크 계층에서의 주소 지정 및 프레임 전송을 관리합니다.
디스크:
VFS (Virtual File System): 다양한 파일 시스템을 추상화하여 일관된 인터페이스를 제공하는 계층입니다.
FS (File System): 파일 시스템의 구현으로,submit bio를 통해 블록 장치에 대한 읽기/쓰기 요청을 처리합니다.
블록 파일 시스템: 물리 디스크 블록을 읽고 쓸 방식을 정의합니다. 예: ext4, xfs, btrfs, f2fs 등.
디바이스 드라이버:
다양한 하드웨어 장치를 운영체제가 사용할 수 있도록 해주는 소프트웨어입니다. 예를 들어, 네트워크 카드, 블루투스 장치, PCI-e 장치 등이 있습니다.
기타: 보안, 도구, 사운드
권한 확인
getfacl hello.txt
소유자에게는 읽기, 쓰기(6) 권한을 주고, 그룹과 기타 사용자에게는 읽기(4) 권한만 부여
chmod 644 hello.txt
chmod g-r hello.txt
그룹(g) 권한의 읽기(r) 권한을 제거(-)
/usr/bin 폴더안에 있는 파일들이 진짜 바이너리파일들만 있을까?
/usr/bin 폴더안에 있는 파일들 중에서 스크립트 파일만 추려내려면?
LIST=$(ls /usr/bin)
echo $LIST
for name in $LIST
do
file $name
done
for name in $LIST; do file $name; done | grep -v ELF
제시하신 명령어는 LIST 변수에 저장된 파일 목록을 순회하면서 각 파일의 타입을 file 명령어로 확인하고, 그 결과 중에서 ELF 파일을 제외하는 작업을 수행합니다.
echo “hello” : 터미널 stdout 출력화면 print
cat hello.txt : 파일을 read 해서 stdout 출력
awk: column 추출
grep: 가로추출: 라인 by 라인 필터링
sort: 정렬 → 알파벳, 숫자(-n), KGM -h
패키지
아이폰 → 앱스토어 →앱설치, 삭제, 업데이트
리눅스
패키지관리자 (apt, dnf, yum)을 통해 패키지 설치, 삭제, 업데이트를 할 수있다.
오픈소스라서 자유도가 높다 (기업활용, 지속적발전)
패키지 관리자
High-Level 패키지 관리자:
apt,yum,dnf는 고수준 패키지 관리 도구로, 사용자 친화적인 인터페이스를 제공하고, 패키지의 설치, 삭제, 업데이트 등을 쉽게 수행할 수 있도록 도와줍니다.
이 도구들은 내부적으로 저수준 패키지 관리자(rpm,dpkg)를 호출하여 실제 패키지 파일을 처리합니다.
Low-Level 패키지 관리자:
rpm(Red Hat Package Manager)과dpkg(Debian Package)는 저수준 패키지 관리 도구로, 패키지 파일을 직접 설치하거나 관리합니다.
이들은 패키지의 세부 정보를 직접 처리하며, 패키지 정보(이름, 버전 등)를 기반으로 패키지 리스트를 생성합니다.
패키지 파일:
.rpm및.deb파일은 각각 Red Hat 계열과 Debian 계열의 패키지 형식으로, 윈도우의 설치 파일과 유사합니다.
이 파일들은 패키지 설치 시 사용됩니다.
프로세스와 커널
프로세스 실행:
OS에서 실행 중인 프로세스의 수를 확인하려면 다음 명령어를 사용할 수 있습니다:
bash
ps -ef | wc -l
유저 프로세스 vs 커널 프로세스:
유저 프로세스는 사용자 애플리케이션(예: Nginx, MySQL, Tomcat, PostgreSQL)으로, 실제로 사용자가 상호작용하는 프로그램입니다.
커널 프로세스는 시스템 자원을 관리하고, 하드웨어와 상호작용하는 데 필요한 작업을 수행합니다.
커널 프로세스의 필요성:
커널은 하드웨어와 소프트웨어 간의 인터페이스 역할을 하며, 시스템의 안정성과 보안을 보장합니다.
커널 프로세스는 이벤트 핸들러와 같은 역할을 하여, 시스템 자원을 효율적으로 관리합니다.
인터럽트 처리
하드 인터럽트(Top-half):
하드웨어 인터럽트가 발생했을 때 즉시 처리되는 부분으로, 빠른 응답이 필요한 작업입니다.
소프트 인터럽트(Bottom-half):
하드 인터럽트가 발생한 후, 이후에 처리해도 되는 작업을 지연시켜 처리하는 부분입니다.
주로workqueue,softirq,tasklet을 통해 구현됩니다.
1. mm_struct
목적: 각 프로세스에 대한 메모리 관리 정보를 저장합니다. 커널은 이 구조체를 통해 프로세스의 가상 메모리 공간을 관리합니다.
구성 요소:
vma (Virtual Memory Area): 프로세스의 가상 메모리 영역을 나타내는 구조체의 리스트입니다. 각vma는 특정 메모리 영역(예: 텍스트, 힙, 스택 등)에 대한 정보를 포함합니다.
페이지 테이블: 가상 주소와 물리 주소 간의 매핑 정보를 저장하는 테이블입니다.
메모리 관리 상태: 페이지 폴트 처리 및 메모리 할당 상태를 관리합니다.
2. vm_area_struct
목적: 각 가상 메모리 영역에 대한 정보를 저장하는 자료구조로, 프로세스의 메모리 공간을 세부적으로 관리합니다.
구성 요소:
시작 주소와 끝 주소: 해당 영역의 가상 메모리 주소 범위를 지정합니다.
메모리 접근 권한: 읽기, 쓰기, 실행 권한을 설정합니다.
백킹 저장소: 해당 영역에 대한 데이터가 어떻게 저장되는지를 나타냅니다(예: 파일 매핑, 익명 메모리 등).
메모리 관리 및 페이지 설정
페이지 테이블: 가상 주소(VA)와 물리 주소(PA) 간의 매핑을 관리합니다. 페이지 테이블은 일반적으로 4KB 크기의 페이지 단위로 할당되며, 이로 인해 메모리 사용의 효율성을 높입니다.
Huge Page: 큰 페이지를 사용하여 메모리 할당의 오버헤드를 줄입니다. 예를 들어, 2MB 또는 1GB의 큰 페이지를 사용하면, 많은 수의 작은 페이지를 관리하는 것보다 효율적입니다.
메모리 할당과 해제
malloc 및 free: 메모리 할당 요청(malloc)이 발생하면mm_struct에 해당 정보를 기록합니다. 해제 요청(free)이 없으면, 가상 메모리 사용량(vsz)은 계속 증가하게 됩니다.
가상 주소와 물리 주소 연결: 현재는 가상 메모리 주소이지만, VA-PA 연결이 이루어진 후에는 실제로 존재하는 가상 주소로 변환되어 사용됩니다.
dnf 란 ? “Dandified YUM” yum (Yellowdog Updater, Modified)의 후속 버전으로, 더 향상된 의존성 해결 알고리즘과 성능 최적화를 제공하고 자동화된 문제 해결기능, 유저 친화적인 기능 등으로 발전된 소프트웨어 패키지 관리자 이다.
패키지 관리 및 의존성
패키지 저장소 서버 URL 설정
패키지 저장소의 URL은/etc/디렉토리에 설정됩니다. 이곳에서 패키지 관리 도구가 사용할 저장소의 위치를 지정합니다.
패키지 정보 및 파일
패키지 정보와 관련된 파일은/var/cache디렉토리에 저장됩니다. 이곳은 패키지 관리 도구가 다운로드한 패키지 파일의 캐시를 보관하는 위치입니다.
캐시
캐시는 미리 읽어놓은 데이터로, 패키지 관리 도구가 더 빠르게 작업을 수행할 수 있도록 도와줍니다.
의존성 패키지
apt,yum,dnf와 같은 패키지 관리 도구는 소프트웨어 설치 시 필요한 의존성 패키지를 자동으로 관리합니다.
패키지 삭제 시 의존성 관리
예를 들어,httpd패키지를 삭제할 경우, 해당 패키지에 의존하는 C, D 패키지는 자동으로 삭제되지 않습니다. 이는 의존성 패키지가 다른 소프트웨어에서 사용될 수 있기 때문입니다.
그러나apt autoremove명령어를 사용하면 더 이상 사용되지 않는 의존성 패키지를 정리할 수 있습니다. 이 명령은 시스템에서 필요 없는 패키지를 자동으로 찾아 삭제합니다.
패키지 설치 예시
nginx설치 시 A, B, C, D 의존성 패키지가 설치됩니다.
nodejs설치 시 C, D 의존성 패키지가 설치됩니다.
httpd설치 시 F, G, C, D 의존성 패키지가 설치됩니다.
내가 설치한것중에 mariadb 관련 뭐가 있지?
패키지정보(이름, 버전)만 가져오는 것 : yum check-update / apt update
패키지 버전 업그레이드 : yum update / apt upgrade
→ 백그라운드 업그레이드가 진행될 수 있다.
ls /boot
grep -v “#”
**`lsb_release -a` 명령어는 리눅스 시스템에서 설치된 배포판의 버전 정보를 출력하는 데 사용됩니다.**
패키지 저장소 서버 URL 설정파일
/etc/apt/sources.list
/etc/yum.repo.d/*.repo
패키지 정보(이름, 버전), 파일(.rpm, .deb)
/var/cache /yum
APT 패키지 관리 시스템
APT 내부 구성
apt는apt-get과apt-cache를 내부적으로 사용하여 패키지를 관리합니다.apt-get은 패키지 설치, 제거 등의 작업을 수행하며,apt-cache는 패키지 정보 조회를 담당합니다.
패키지 정보 저장
패키지 정보는/var/lib/apt/lists/디렉토리에 저장됩니다. 이 폴더가 비어 있으면 현재 리눅스 시스템에서 패키지 정보(이름, 버전)가 없으므로apt search명령어를 사용할 수 없습니다.
그러나 이미 설치된 패키지에 대한 정보는 여전히 존재하므로, 설치된 패키지에 대한 정보는 조회할 수 있습니다.
패키지 저장소와 정보
패키지 정보는 패키지 저장소(repo) 서버로부터 수집됩니다. 이 정보에는 패키지의 이름, 버전 등이 포함됩니다.
패키지 조회 과정
사용자가apt search명령어를 입력하면, APT는 저장소에서 패키지 정보를 조회하여 사용자가 요청한 패키지를 검색합니다.