리눅스 기반 보안 개념 (CIA 삼원칙)

CompTIABeginner
지금 연습하기

소개

이 실습에서는 정보 보안의 기본 원칙인 CIA Triad(기밀성, 무결성, 가용성) 에 대한 실질적인 경험을 쌓게 됩니다. Linux 환경에서 작업하면서 데이터를 보호하고 시스템 안정성을 보장하는 실용적인 기술을 배우게 됩니다. 이 실습은 파일 권한을 구성하고, 암호화 해시를 사용하여 파일 무결성을 입증하며, 기본 서비스 모니터링을 시뮬레이션하여 이러한 핵심 개념이 실제 시나리오에 어떻게 적용되는지 이해하도록 안내합니다.

먼저 chmod 명령을 사용하여 Linux 파일 권한을 조작하여 민감한 파일에 대한 기밀성과 무결성을 적용하고, 승인된 사용자만 접근하고 수정할 수 있도록 합니다. 다음으로, MD5 및 SHA256 해시를 생성하여 기준선을 만들고 파일이 변경되지 않았는지 확인하여 파일 무결성을 탐색합니다. 마지막으로 간단한 서비스를 시뮬레이션하고 기본 모니터링 명령을 사용하여 가용성 개념과 서비스 중단을 감지하는 방법을 이해합니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 중급 레벨의 실험이며 완료율은 74%입니다.학습자들로부터 99%의 긍정적인 리뷰율을 받았습니다.

기밀성 및 무결성을 위한 리눅스 파일 권한 구성

이 단계에서는 정보 보안의 두 가지 핵심 원칙인 **기밀성 (Confidentiality)**과 **무결성 (Integrity)**을 적용하기 위해 기본적인 Linux 파일 권한을 사용하는 방법을 배우게 됩니다. 기밀성은 데이터에 권한 있는 사용자만 접근할 수 있도록 보장하고, 무결성은 데이터가 무단으로 변경되지 않도록 보장합니다. 파일을 생성하고, 기본 권한을 확인한 다음, chmod 명령을 사용하여 접근을 제한하고 수정을 방지할 것입니다. 모든 작업은 홈 프로젝트 디렉토리인 ~/project에서 수행됩니다.

이제 ~/project 디렉토리 안에서 민감한 데이터를 나타내는 샘플 파일을 생성합니다. echo 명령을 사용하여 파일 안에 텍스트를 넣겠습니다.

echo "Top Secret Details" > confidential_data.txt

ls -l 명령을 사용하여 파일이 생성되었는지 확인하고 기본 권한을 살펴보겠습니다. 이 명령은 긴 목록 형식으로 정보를 제공합니다.

ls -l confidential_data.txt

다음과 유사한 출력을 보게 될 것입니다. 정확한 시간과 크기는 다를 수 있습니다.

-rw-rw-r-- 1 labex labex 19 Jul 21 15:09 confidential_data.txt

권한 문자열 -rw-rw-r--을 분석해 보겠습니다.

  • 첫 번째 문자 -는 일반 파일임을 나타냅니다.
  • 다음 세 문자 rw-소유자(사용자 labex) 에 대한 권한입니다. r은 읽기, w는 쓰기를 의미합니다.
  • 다음 세 문자 rw-그룹(그룹 labex) 에 대한 권한입니다. 그룹은 파일을 읽고 쓸 수 있습니다.
  • 마지막 세 문자 r--기타 사용자(시스템의 다른 모든 사용자) 에 대한 권한입니다. 이들도 파일을 읽기만 할 수 있습니다.

이 기본 설정은 시스템의 모든 사용자가 "Top Secret" 파일을 읽을 수 있으므로 기밀성을 위반합니다. 소유자만 읽고 쓸 수 있도록 권한을 변경하여 이를 수정하겠습니다. 숫자 (8 진수) 코드 (4는 읽기, 2는 쓰기, 1은 실행) 를 사용하는 chmod 명령을 사용할 것입니다. 소유자에게 읽기/쓰기 접근 권한 (4+2=6) 을 부여하고 그룹 (0) 및 기타 사용자 (0) 에 대한 모든 접근 권한을 제거하려면 코드 600을 사용합니다.

chmod 600 confidential_data.txt

권한을 다시 확인합니다.

ls -l confidential_data.txt

출력은 이제 더 안전해진 새로운 권한을 반영하여 기밀성을 강화합니다.

-rw------- 1 labex labex 19 Jul 21 15:09 confidential_data.txt

다음으로, 소유자에게도 읽기 전용으로 만들어 파일의 무결성을 보호하겠습니다. 이렇게 하면 실수로 수정하는 것을 방지할 수 있습니다. 소유자에게만 읽기 전용을 의미하는 400으로 권한을 설정하여 기밀성과 무결성을 모두 유지합니다.

chmod 400 confidential_data.txt

이제 파일에 새 텍스트를 추가하여 수정해 보겠습니다.

echo "This should not be added." >> confidential_data.txt

작업이 실패하고 "Permission denied" 오류가 표시됩니다. 이는 파일의 무결성이 변경으로부터 보호되고 있음을 보여줍니다.

zsh: permission denied: confidential_data.txt

마지막으로, 읽기 전용 상태를 확인하기 위해 마지막으로 한 번 더 권한을 확인합니다.

ls -l confidential_data.txt
-r-------- 1 labex labex 19 Jul 21 15:09 confidential_data.txt

파일의 기밀성과 무결성을 모두 보호하도록 파일 권한을 성공적으로 구성했습니다.

해싱 (MD5/SHA256) 을 이용한 파일 무결성 시연

이 단계에서는 암호화 해싱을 사용하여 파일 무결성을 확인하는 방법을 배웁니다. 파일 권한은 비인가 사용자가 파일을 수정하는 것을 방지할 수 있지만, 인가된 사용자의 실수로 인한 변경이나 더 정교한 공격으로부터는 보호하지 못합니다. 해시 함수는 파일에 대한 고유한 디지털 지문 (고정 길이의 문자열) 을 생성합니다. 파일의 단 한 비트만 변경되어도 완전히 다른 해시가 생성되므로, 변조 탐지에 탁월한 도구입니다. 여기서는 Linux 의 표준적이고 안전한 해싱 도구인 sha256sum 명령어를 사용합니다.

먼저 올바른 디렉토리에 있는지 확인하십시오. 이전 단계에서 이어지는 경우, 이미 ~/project 디렉토리에 있어야 합니다.

지난 단계에서 파일 무결성을 보호하기 위해 confidential_data.txt를 읽기 전용으로 만들었습니다. 해싱이 어떻게 작동하는지 시연하기 위해, 먼저 파일을 소유자에게 다시 쓰기 가능하도록 만들어야 합니다. chmod를 사용하여 사용자 (u+w) 에게 쓰기 권한을 다시 부여할 것입니다.

chmod u+w confidential_data.txt
ls -l confidential_data.txt

이제 권한은 -rw-------가 되어야 하며, 이는 소유자가 파일에 다시 쓸 수 있지만 기밀성은 유지됨을 나타냅니다.

-rw------- 1 labex labex 19 Jul 21 15:09 confidential_data.txt

이제 원본의 신뢰할 수 있는 파일에 대한 SHA256 해시를 생성해 보겠습니다. 이 해시는 무결성 검사를 위한 기준선 역할을 할 것입니다.

sha256sum confidential_data.txt

이 명령은 해시인 긴 문자열과 파일 이름을 출력합니다.

106b4d0169831f239fec7a53b072640a2c0b815e00b088bbe44e6689e92cb96d  confidential_data.txt

나중에 검증을 쉽게 하기 위해, 이 신뢰할 수 있는 해시 값을 별도의 파일에 저장하는 것이 일반적인 관행입니다. 명령의 출력을 hashes.sha256이라는 새 파일로 리디렉션해 보겠습니다.

sha256sum confidential_data.txt > hashes.sha256

이 새 파일의 내용을 확인하여 해시가 올바르게 저장되었는지 확인할 수 있습니다.

cat hashes.sha256
106b4d0169831f239fec7a53b072640a2c0b815e00b088bbe44e6689e92cb96d  confidential_data.txt

이제 비인가된 수정을 시뮬레이션해 보겠습니다. 민감한 파일에 새 텍스트 줄을 추가할 것입니다.

echo "This is an unauthorized modification." >> confidential_data.txt

confidential_data.txt 파일이 이제 변경되었습니다. 파일의 무결성을 확인하기 위해, sha256sum-c (또는 --check) 플래그를 사용하여 hashes.sha256에 저장된 신뢰할 수 있는 값과 파일의 현재 해시를 비교하도록 지시할 수 있습니다.

sha256sum -c hashes.sha256

파일 내용이 변경되었기 때문에 새 해시는 저장된 해시와 일치하지 않습니다. 명령은 실패를 보고하며, 파일의 무결성이 손상되었음을 증명합니다.

confidential_data.txt: FAILED
sha256sum: WARNING: 1 computed checksum did NOT match

이 강력한 기법을 통해 파일이 원래 상태에서 변경되었는지 여부를 빠르고 안정적으로 확인할 수 있습니다.

서비스 가용성 및 기본 모니터링 시뮬레이션

이 단계에서는 CIA 보안 삼축의 세 번째 구성 요소인 가용성 (Availability) 원칙을 탐구합니다. 가용성은 시스템과 서비스가 필요할 때 작동하고 접근 가능하도록 보장합니다. 간단한 웹 서비스를 시뮬레이션하고, 서비스가 실행 중인지 확인하는 방법, 서비스 장애를 시뮬레이션한 다음, 가용성 확인을 자동화하는 기본 모니터링 스크립트를 작성하는 방법을 배우게 됩니다.

먼저 ~/project 디렉토리에 있는지 확인합니다.

Python 의 내장 웹 서버를 사용하여 실행 중인 서비스를 시뮬레이션합니다. 이 명령은 포트 8000에서 웹 서버를 시작하고 현재 디렉토리의 파일을 제공합니다. 끝에 있는 &는 프로세스를 백그라운드에서 실행하므로 터미널을 계속 사용할 수 있습니다.

python3 -m http.server 8000 &

프로세스가 시작되었음을 나타내는 메시지와 함께 해당 프로세스 ID(PID) 가 표시됩니다.

[1] 12345

Enter를 눌러 계속 진행합니다.

이제 서비스가 실행 중입니다. 서비스가 실행 중인지 확인하는 기본적인 방법은 해당 프로세스가 존재하는지 확인하는 것입니다. pgrep 명령을 사용하여 이름으로 프로세스의 PID 를 찾을 수 있습니다.

pgrep -f http.server

이는 서버 프로세스의 PID 를 반환하여 메모리에서 실행 중임을 확인해야 합니다.

12345

하지만 실행 중인 프로세스가 서비스가 올바르게 작동함을 보장하지는 않습니다. 더 나은 확인 방법은 사용자가 하는 것처럼 서비스에 연결을 시도하는 것입니다. curl 명령을 사용하여 로컬 서버로 요청을 보내겠습니다.

curl http://localhost:8000/confidential_data.txt

서비스가 사용 가능하므로 이전 단계에서 생성한 파일의 내용으로 응답합니다.

Top Secret Details
This is an unauthorized modification.

이제 서비스 장애를 시뮬레이션해 보겠습니다. kill 명령을 사용하여 웹 서버 프로세스를 종료합니다. 이전에 찾은 PID 가 필요합니다.

## pgrep 명령에서 나온 실제 PID로 12345를 바꾸세요
kill 12345

kill을 실행한 후 백그라운드 작업에 대한 "Terminated" 메시지가 표시될 수 있습니다. 이제 curl로 다시 서비스에 액세스해 보겠습니다.

curl http://localhost:8000/confidential_data.txt

이번에는 서비스가 더 이상 실행 중이 아니며 연결을 수락할 수 없으므로 명령이 실패합니다. 이는 가용성 부족을 보여줍니다.

curl: (7) Failed to connect to localhost port 8000 after 0 ms: Connection refused

마지막으로 이 확인을 자동화하기 위한 간단한 모니터링 스크립트를 만들어 보겠습니다. nano를 사용하여 monitor.sh라는 새 파일을 만듭니다.

nano monitor.sh

편집기에 다음 스크립트를 입력합니다. 이 스크립트는 curl을 사용하여 서비스를 확인합니다. 성공적인 응답 (200 OK) 을 받으면 서비스가 "UP"이라고 보고하고, 그렇지 않으면 "DOWN"이라고 보고합니다.

#!/bin/bash

## localhost:8000의 서비스가 응답하는지 확인
if curl -s --head http://localhost:8000 | grep "200 OK" > /dev/null; then
  echo "Service Status: UP"
else
  echo "Service Status: DOWN"
fi

Ctrl+X, Y, Enter를 눌러 파일을 저장하고 nano를 종료합니다.

chmod를 사용하여 스크립트를 실행 가능하게 만듭니다.

chmod +x monitor.sh

이제 모니터링 스크립트를 실행합니다. 서비스가 중지되었으므로 "DOWN"으로 보고해야 합니다.

./monitor.sh
Service Status: DOWN

이제 서비스를 시작하고, 가용성을 확인하고, 장애를 시뮬레이션하고, 이를 모니터링하는 기본 스크립트를 만드는 방법을 배웠습니다.

요약

이 실습에서는 일반적인 Linux 도구를 사용하여 CIA(기밀성, 무결성, 가용성) 보안 삼축의 기본 원칙에 대한 실질적인 경험을 쌓았습니다. chmod 명령을 사용하여 Linux 파일 권한을 조작하여 **기밀성 (Confidentiality)**을 강제하고, 민감한 파일에 대한 액세스를 제한하여 승인된 소유자만 해당 내용을 볼 수 있도록 했습니다. 또한, 파일 권한을 설정하여 무단 수정을 방지하고, MD5 및 SHA256 과 같은 해싱 알고리즘을 사용하여 고유한 체크섬을 생성함으로써 파일이 변조되지 않았는지 확인할 수 있도록 하여 **무결성 (Integrity)**을 탐구했습니다.

가용성 (Availability) 개념은 서비스의 운영 상태를 시뮬레이션하고 기본 모니터링을 수행하여 액세스 가능한지 확인하는 방식으로 시연되었습니다. 이러한 실습 단계를 통해 기본 Linux 명령을 적용하여 정보 보안의 핵심 원칙을 실제로 구현하고 이해했습니다.