[DreamHack] 시스템보안 기초

김찬울·2023년 2월 20일
0

리눅스 설치

ubuntu 20.04를 사용하므로
권장사항인 ubuntu 18.04를 docker container로 올림.

docker run -d -it --name ubuntu ubuntu:18.04 
# 이름 ubuntu 의 18.04버전 이미지 미보유시 자동 설치된다.
# -it옵션 없으면 접속 불가능하고 -d --name {이름} 은 고정이라고 생각하자.
# {이름} 미입력시 이름 자동 생성 
docker ps -a 
#컨테이너 생성 확인
# 이미지 리스트를 보고싶다면 docker images ls
docker exec -it ubuntu /bin/bash
#컨테이너 접속하기 

타 velog에 docker 설치법은 나와있다.

세그먼트

리눅스(이하 컴퓨터)에서는 cpu에서 받은 명령을 처리한다.
이때 처리하는 대상은 모두 메모리 위에 올리고 처리하는데
이때 필요한 권한은 각각 Write, Read, Execute 세가지가 있다.
Write와 Execute는 특히나 위험하기에
컴퓨터에서는 메모리 영역을 5가지 세그먼트로 나누어서 다룬다.

코드 세그먼트

  • 코드를 실행하기 위해 입력한 코드를 기계어로 번역하여 가지고 있는 공간
  • 숫자 단위

데이터 세그먼트

  • 변수, 상수의 초기화된 값이 들어가있다.
  • Data와 RO(Read Only)data가 있다.
  • ex)
    char *str_ptr = "readonly"
    이때 *str_ptr은 게속 초기화 할 수 있으므로 data,
    "readonly"라는 데이터는 변하지 않으므로 rodata다.

BSS 세그먼트(Block started by Symbol)

  • 값이 변할 수도 있다.
  • 초기화되지 않은 변수가 들어감
  • 초기화되지 않은 변수는 컴파일시에 0으로 자동 매핑된다.

스택 세그먼트

  • 아래로 자란다.
  • 함수 내부 변수가 저장된다. 함수 종료시 휘발.
  • 함수 호출시 생성되었다가 호출 종료되면서 사라지므로 스택처럼 나중에 들어온게 일찍 나가게 된다.

힙 세그먼트

  • 위로 자란다.(스택과 메모리 끝에 위치하여 확장된 스택 또는 힙이 충돌나지 않게 한다.)
  • c언어에서 malloc 등의 메모리 영역 할당이 이에 해당한다.
profile
코린코린이

0개의 댓글