윈도우 관리자 계정 -> administrator (기본 설치 계정) 사용자 및 그룹 관리 명령어 -> net user / net localgroup
리눅스 관리자 계정
-> root
사용자 및 그룹 관리
-> /etc/passwd 파일에서 계정 목록을 확인
인증(Authentication): 사용자는 자신의 신분을 확인하기 위해 로그인 프로세스를 수행합니다. 이 단계에서는 사용자가 제공한 자격 증명(예: 사용자 이름과 암호)을 확인하여 사용자를 인증합니다.
세션 생성(Session Creation): 사용자가 성공적으로 인증되면 시스템은 사용자의 세션을 생성합니다. 세션은 사용자와 시스템 간의 연결을 나타내는 고유한 식별자입니다.
세션 관리(Session Management): 이 단계에서 시스템은 사용자의 세션을 추적하고 관리합니다. 사용자의 활동, 세션 유지 시간 제한, 세션 상태 등을 관리합니다. 또한 사용자의 권한을 확인하고 접근 제어를 적용합니다.
세션 종료(Session Termination): 사용자가 로그아웃하거나 일정 시간 동안 활동이 없는 경우 세션을 종료합니다. 종료된 세션은 사용자의 식별을 위한 세션 토큰이나 기타 세션 관련 데이터를 폐기하여 보안을 강화합니다.
세션 관리는 다양한 보안 위협에 대응하기 위해 추가적인 기능과 보호 메커니즘을 포함할 수 있습니다. 이러한 기능에는 세션 타임아웃 설정, 다중 세션 제어, 강력한 세션 식별자 생성, 세션 로깅 및 모니터링, 비인가된 세션 방지 등이 포함될 수 있습니다.
시스템 보안에서 접근 제어는 인증된 사용자가 시스템의 자원 및 정보에 접근하는 것을 통제하는 메커니즘입니다. 접근 제어는 시스템의 무단 액세스, 권한 부여 및 제한, 데이터 보안 등을 관리하여 시스템의 기밀성, 무결성 및 가용성을 보호하는 데 중요한 역할을 합니다.
식별(Identification): 사용자 또는 주체(Subject)를 고유하게 식별하기 위한 절차입니다. 주체는 개별 사용자, 시스템, 프로세스 등을 포함할 수 있습니다. 식별은 주로 사용자 이름, 사용자 ID, 디지털 인증서 등을 사용하여 이루어집니다.
인증(Authentication): 사용자 또는 주체의 신원을 확인하는 절차입니다. 인증은 주로 비밀번호, 암호화된 토큰, 생체 인식 등을 사용하여 이루어집니다. 사용자가 제공한 인증 요소가 정확하게 일치하는지 확인함으로써 주체의 신원을 확인합니다.
권한 부여(Authorization): 인증된 주체에 대한 권한과 권한 수준을 정의하는 절차입니다. 권한은 사용자가 특정 작업을 수행하거나 자원에 접근할 수 있는 권한을 의미합니다. 이를 통해 시스템 관리자는 사용자가 필요로 하는 작업 및 자원에 대한 액세스 수준을 지정할 수 있습니다.
액세스 제어(Access Control): 권한 부여에 따라 접근을 제한하는 메커니즘입니다. 액세스 제어는 주체의 신원, 요청한 작업 또는 서비스, 대상 자원의 보안 설정 등을 고려하여 액세스를 허용하거나 거부합니다. 이는 시스템의 보안 정책, 액세스 제어 목록(ACL), 역할 기반 액세스 제어(RBAC) 등을 통해 구현될 수 있습니다.
감사(Auditing): 접근 제어에 대한 모든 활동을 기록하고 검토하는 절차입니다. 감사는 시스템 로그, 보안 이벤트 로그 등을 통해 수행됩니다. 이를 통해 시스템의 보안 상태를 모니터링하고, 무단 액세스
시스템 보안에서 권한 관리는 사용자 또는 주체가 시스템의 자원과 기능에 대한 액세스 수준을 관리하는 프로세스를 말합니다. 권한 관리는 시스템의 보안을 강화하고 권한 부여 원칙에 따라 최소한의 권한을 갖도록 하는 데 중요한 역할을 합니다.
식별(Identification): 각 사용자 또는 주체에 대해 고유한 식별자를 할당합니다. 이는 주로 사용자 이름, 사용자 ID, 그룹 멤버십 등을 사용하여 이루어집니다.
권한 부여(Authorization): 각 사용자 또는 주체에 대한 액세스 권한을 정의하고 부여합니다. 권한은 시스템의 자원(파일, 디렉토리, 네트워크 리소스 등)에 대한 특정 작업(읽기, 쓰기, 실행 등)을 수행할 수 있는 권한을 의미합니다. 권한은 일반적으로 역할 또는 그룹 기반으로 할당되며, 시스템 관리자는 사용자 또는 그룹에 대한 권한을 지정합니다.
최소 권한 원칙(Principle of Least Privilege): 최소 권한 원칙은 사용자 또는 주체에게 필요한 최소한의 권한만을 부여하는 원칙입니다. 이를 통해 권한 부여의 오용이나 실수로 인한 보안 위험을 최소화할 수 있습니다. 예를 들어, 사용자가 특정 파일을 읽기만 할 필요가 있다면 쓰기 또는 삭제 권한을 부여하지 않습니다.
권한 상속(Inheritance): 일부 시스템은 권한을 상위 개체(예: 디렉토리)에서 하위 개체(예: 파일)로 상속할 수 있습니다. 이를 통해 상위 개체에 대한 권한 변경이 하위 개체에도 적용되어 일관된 권한 관리가 가능합니다.
시스템 보안에서 로그 관리는 시스템에서 발생하는 로그 데이터를 수집, 저장, 모니터링, 분석하는 프로세스를 말합니다. 로그는 시스템의 활동, 이벤트, 오류, 보안 위반 등에 대한 기록을 포함하며, 로그 관리는 시스템 보안 감사 및 모니터링, 이벤트 추적, 문제 해결, 위협 탐지 등에 중요한 역할을 합니다.
로그 수집(Log Collection): 시스템에서 발생하는 로그 데이터를 수집합니다. 로그는 다양한 소스에서 생성될 수 있으며, 운영 체제, 애플리케이션, 네트워크 장비, 보안 도구 등에서 발생할 수 있습니다. 이러한 로그 데이터는 중앙 집중식 로그 서버 또는 SIEM(System Information and Event Management) 플랫폼과 같은 로그 관리 시스템으로 전송됩니다.
로그 저장(Log Storage): 수집된 로그 데이터를 안전하게 저장합니다. 로그는 장애, 사고, 보안 조사 등을 위해 장기적으로 보관되어야 하므로, 안전한 로그 저장소 또는 시스템 로그 아카이브를 사용하여 저장됩니다. 로그의 무결성과 가용성을 보장하기 위해 백업 및 복구 메커니즘도 고려되어야 합니다.
로그 모니터링(Log Monitoring): 저장된 로그 데이터를 실시간으로 모니터링하여 보안 위협이나 비정상적인 활동을 탐지합니다. 로그 모니터링은 알림, 경고, 이벤트 관리 등을 통해 관리자에게 중요한 사건을 알려줄 수 있습니다. 이를 위해 로그 관리 시스템은 로그 분석 기능과 경고 메커니즘을 제공합니다.
로그 분석(Log Analysis): 수집된 로그 데이터를 분석하여 보안 문제나 이상 징후를 탐지합니다. 로그 분석은 패턴 인식, 알려진 공격 시그너처 검사, 기계 학습 및 통계적 분석을 통해 이루어질 수 있습니다. 분석 결과는 보안 인시던트 대응, 위험 평가, 정책 개선 등에 활용됩니다.
시스템 보안의 취약점 관리는 시스템 내부 또는 외부에서 발견된 보안 취약점을 식별, 평가, 조치하는 프로세스입니다. 취약점은 시스템, 네트워크, 애플리케이션 등에서 발생할 수 있는 보안 약점이나 결함을 의미하며, 이를 관리함으로써 시스템의 안전성을 유지하고 보안 위험을 최소화할 수 있습니다.
취약점 식별(Vulnerability Identification): 시스템 및 네트워크를 대상으로 취약점 스캐닝, 보안 평가, 패치 관리 도구 등을 사용하여 취약점을 식별합니다. 이를 위해 보안 업데이트, 제로데이 취약점 정보, 보안 커뮤니티, 취약점 데이터베이스 등의 정보를 참고합니다.
취약점 평가(Vulnerability Assessment): 식별된 취약점을 평가하여 그 심각성과 위험도를 판단합니다. 취약점 평가는 취약점의 영향 범위, 악용 가능성, 위험 등을 평가하여 우선순위를 정하고, 취약점을 해결하기 위한 조치를 계획하는 데 도움을 줍니다.
취약점 조치(Vulnerability Remediation): 식별된 취약점에 대한 조치 계획을 수립하고 구현합니다. 이는 주로 취약점 패치, 보안 설정 변경, 보안 패치 및 업데이트 적용, 보안 설정 강화 등을 포함합니다. 취약점 조치는 시스템 관리자, 보안 담당자, 개발팀 등의 협력과 조정을 필요로 합니다.
취약점 모니터링(Vulnerability Monitoring): 시스템의 취약점 상태를 지속적으로 모니터링하고 관리합니다. 이는 취약점 스캐닝, 로그 분석, 침입 탐지 시스템(IDS/IPS) 등을 활용하여 새로운 취약점 등을 탐지하고 대응합니다.
원인
입력 값의 길이를 올바르게 검사하지 않아 생기는 취약점
프로그램의 실행 흐름을 바꾸어 특정 코드가 실행되게 하는 기법
해결방안
입력 값에 대한 길이 및 타입에 대한 체킹은 필수!
C언어 Stack BOF 방지를 위해, strcpy 함수를 strncpy로 교체한다
-> strncpy(buffer, argv[1], sizeof(buffer)-1);
형식으로 대입하는 매개변수 len 만큼만, dst 버퍼에 저장하도록 유도할 수 있다
sizeof에 -1을 설정하는 것은 C언어 문자열 끝 부분 null(0x00)까지 고려한 설계
입력 문자열이 버퍼의 크기와 같거나 클 시,
프로그램을 종료하는 방식으로도 BOF를 방지할 수 있다
(C언어 문자열 끝 부분 null(0x00) 고려하여, 버퍼 크기와 같은 문자열도 체크가 필요)
#include <stdio. h>
#include <dumpcode.h>
int main(int arg, char "argvl]) {
char buf[161:
char buf2[161:
if (arge != 2) {
printf(*Usage : %s argln", argv[0]);
exit(1):
}
strepy(buf2, argv[1));
system(buf);
dumpcode(buf2,64);
}
컴파일 후 인자 값을 넣어서 실행
-> ./bof1 AAAAAAAAAAAA
Dumpcode 함수를 통해 출력된 메모리 덤프를 확인
각 문자열 별 buf와
SFP (Stack Frame Pointer)
RET (Return Address)
구성 확인 가능