본문 바로가기
  • 시 쓰는 개발자
CS 개념/컴퓨터 보안

컴퓨터보안 Intro ~ Network1 요약

by poetDeveloper 2024. 4. 26.

>> key 개수
- 대칭암호                   : N명일 때 N*(N-1) / 2 개의 key 필요
- 비대칭 암호 (공개키) : N명일 때 2N개 키가 필요 (공개키-개인키 쌍으로 N개 pairs)

>> Access Control 3개
- ACM (표)
- ACL
- RBAC (계층화 됨)

>> HASH의 특징 2개
- One way : pw를 함수에 넣어 해쉬값 생성은 쉽지만, 반대로 해쉬값 보고 pw 알아내긴 어렵다
- Collision-resistant : 같은 해쉬값을 가지는 PW1, PW2가 나올 수도 있긴 한데 매우 매우 어려움.

>> HASH 보안 강화기법 2개
- 해시 해서 나온 값을 다시 해시함수로 돌린다.
- salt : 임의의 문자열을 덧붙인다.
ㄴ Salt 비트 수가 B, 단어 개수가 D라고 할 때 salt화 된 pw를 공격하는 횟수는 2^B * D번을 해야한다.

>> Authentication 방법 3가지
- has 열쇠
- knows 패스워드
- is 지문인식

>> 마그네틱 카드 스마트 카드 차이점
- 마그네틱 : 정보 읽기만 가능, 복제위험 있어서 pin으로 막고자함
- 스마트 : 정보 읽기, 쓰기 둘다 가능, 복제 어려움

>> 생체인증 요구사항 4가지
- 보편성      : 모든 사람들이 가지고 있는 특성이어야함.
- 분별성 : 각 사람마다 구별 가능한 특성이어야함.
- 영구성     : 잘 바뀌지 않는 특성이어야함.
- 수집성     : 효과적으로 결정하고 수량화할 수 있어야함

>> Kernel
- OS의 핵심, HW(CPU, Memory, I/O)를 관리함.
- Hardward - Kernel & 커널 외 OS기능 - Application 이렇게 사이에서 인터페이스 역할 함
- OS 표준 액세스 모델은 DAC (임의 접근을 제어)

>> Memory Layout
- Stack : 서브루틴 처리용
- Heap : 동적 세그먼트 공간
- BSS : 초기화 안된 static 변수
- Data : 초기화 된 static 변수
- Text : 바이너리 머신코드

>> 가상 메모리 장점
- 메모리 부족하지만 충분한 것처럼 보여줌
- OS가 달라도 VM 위에 올려두면 프로그램 실행 가능
- HW 효율성, 이식성, 보안, 관리에 좋음

>> 리눅스 vs 윈도우 차이
- 계층 구조             : 방향 비순환 그래프 VS 트리
- 퍼미션 차이         : 허용만 가능 VS 허용, 거부 가능
- 파일 액세스 여부 : 파일 및 모든 상위폴더의 ACL 따름 VS 해당 파일의 ACL만 의존

>> 리눅스에서 하드링크, 심볼릭링크 차이
- 하드링크는 파일만 대상으로
- 심볼릭 링크는 파일과 디렉토리를 대상으로
= 하드링크는 연결된 하드링크 없을 때만 파일 삭제 가능
= 심볼링크는 파일 삭제시 해당 파일에 대한 심볼링크 무효화

>> File 공유에서 생기는 문제
- 허용된 사용자들 가지고 하드링크 복사 가능
- 임의의 심볼링크 만들 수 있음

>> SET-UID
- ACL 시스템 외부 기능임
- 유저4 그룹2 스티키1
- r4 w2 x1
- 2개의 User id를 가짐. RUID(사용자), EUID(소유자)

>> SET-UID 보안 이점
- 제한된 행동을 전제로 둠. ex) 자기 비밀번호 아는 사람만 비밀번호 변경이 가능
- 특정 콘텐츠에 대해서만, 특정 방식으로 변경하도록 제한을 둠.

>> 명령어 모음
- su : 루트로 로그인
- su ABC : ABC 유저로 로그인
- sudo command : 루트 권한으로 실행
- sudo chmod 4775 Filename : set uid 설정하기
- sudo chown root Filename  : 파일 소유자를 루트로 변경

>> Buffer Overflow 대응책
- 버퍼를 동적 할당한다.
- 개발자 : strncpy(), strncat() 등 복사 전 데이터 길이를 확인하는 "안전한 라이브러리"를 사용한다.
- OS : ASLR 적용 (스택 위치 무작위화)
- 컴파일러 : Stack-guard 사용 (카나리아)
- 하드웨어 : 실행 불가능한 Stack 사용하기
+) 버퍼 빈 공간을 다 NOP으로 채우기

>> Buffer Overflow가 자바에서는 발생하지 않는 이유
- 객체를 힙에 동적할당함
- 포인터가 없음

>> ASLR
- 코드가 메모리에 로드될 때마다 스택 주소를 바꿔준다.
- kernel.randomize_va_space 값에 따라 달라진다.
ㄴ 0 : 주소 공간 무작위 지정 안함. 즉, 버퍼 오버플로우 "허용"
ㄴ 1 : 스택 메모리 주소만 랜덤화 한다.
ㄴ 2 : 스택과 힙의 메모리 주소 둘 다 랜덤화 한다.

>> 바이러스 4단계
- Dormant 잠복 : 탐지를 피하면서 잠복해있음
- Propagation 전파 : 복제하며 파일 감염시킴
- Triggering 트리거링 : 이제부터 의도한 작업을 시작함
- Action 실행 : payload라는 악성 작업을 수행함

>> 바이러스가 은폐하는 방법
- 암호화된 바이러스 : 복호화 엔진 + 암호화 된 본문, 암호화 키는 무작위 생성
- 다형성 바이러스     : 복호화 엔진의 무작위 변형을 사용하는 암호화된 바이러스. CPU 에뮬레이터를 사용한 탐지
- 변종 바이러스        : 코드 순열이나 명령어 대체등이 접근에 포함되고, 탐지가 어려움

>> 최초의 바이러스, 웜 이름
- 바이러스 : Brain
- 웜 : Morris

>> 루트킷 찾는 방법
- 파일 시스템 2번 스캔하기
- Windows API 이용한 하이레벨 스캔
- Disk Access 이용한 원시레벨 스캔

>> Botnet
- 악성 SW에 감염되어 소유자 허가 없이(혹은 소유자 모르게) 집단으로 제어되는 "네트워크"이다. 봇넷 코디네이터는 봇넷을 사용해 DDoS 공격을 개시하고 데이터를 도용하며 멀웨어를 유포할 수 있다.

>> 레이어 특징
- Link layer : 48bit MAC, Frame단위
- Network  layer  : 32bit 또는 128bit IP, Packet 단위, 비열결상태, Best Effort
- Transport layer : 16bit port, Segment 단위, TCP UDP

>> MAC 주소 (media access control) 48bit 내용
- 처음 옥텟 8개 : IEEE에서 할당한 고유 식별자
- 다음 옥텟 8개 : 조직에서 원하는 대로 할당

>> Sniffing, Spoofing
- Sniffing  : 네트워크 오가는 패킷을 엿보는 행위 (Wireshark)
- Spoofing : 시스템 침입 X, 잘못된 정보 신뢰하게 만듦

>> ARP 주소 변환 프로토콜
- 데이터링크 2층과 네트워크 3층 사이에서 IP주소를 MAC 주소로 바꿔주는 역할

>> Telnet : 암호화 안된 양방향 통신 프로토콜, TCP

>> IP 취약점
- 암호화 안돼서 도청가능
- 소스 인증 안함
- 무결성 검사 안해서 패킷 이동중에 내용 위조, 주소 바꾸기 등 가능
- 대역폭 제약 없어서 패킷 많이 보내서 DOS 공격 가능