출처 인프런 강의
컴퓨터 자원들은 우연히 혹은 의도적으로 잘못 사용된다. 컴퓨터 자원을 미인가 접근, 악의적인 파괴 혹은 변조, ㅅ실수에 의한 지시의 비일관성으로부터 보호한다.
데이터의 기밀성, 완전성, 가용성 침해, 서비스 탈취, 서비스 방해 라는 여러 종류의 보안 위배가 있다.
보안의 수준은 다음과 같이 네 개의 수준으로 나뉜다.
(1) 물리
(2) 네트워크
(3) 운영체제
(4) 애플리케이션
(1) Malware: 컴퓨터 시스템 공격을 목적으로 설계된 소프트 웨어
(2) Code Injection: 대부분의 소프트 웨어는 악의를 갖지 않는다. 그럼에도 불구하고 code injection에 의한 심각한 위협이 존재한다.
(3) 바이러스/웜: 바이러스는 자가 복제를 통해 다른 프로그램을 감염시키며, 웜은 네트워크를 통해 스스로 복제된다.
(1) Sniffing: 네트워크 트래픽을 탈취하는 하는 것
(2) Spoofing: 구성원으로 위장 혹은 통신 중개자가 되어 두 피어간의 트랜잭션을 탈취/변조하는 행위
위의 두 가지는 적극성으로 구분될 수 있다.
(3) DOS: 합법적인 시스템 사용을 방해하는 것
(4) Port Sacanning: 이 자체로 공격은 아니지만, 취약점 탐색을 위한 수단으로 사용된다.
네트워크에서는 송신자와 수신자가 메시지를 주고받는다. 이 때 운영체제는 메시지의 신뢰성을 어떻게 확보하는가? 암호화는 신뢰성 확보 작업 부담을 덜어준다. 이는 Key를 통한 암호화와 복호화에 의존한다.
암호화는 크게 두 가지 종류로 나뉜다.
(1) 대칭키: DES, AES
(2) 비대칭키: RSA
인증은 송신자의 메시지를 보호하고, 변조가 일어나지 않았다는 확신을 제공한다.
(1) MAC
(2) 전자서명
프로세스, 유저 혹은 어떤 시스템이라도 반드시 작업 수행을 위한 최소한의 권한이 부여된다. pemission은 악의적인 공격이 발생할 확률을 줄여준다.

이는 다양한 정책을 정의하는 메커니즘을 제공한다.
실행중인 프로그램은 반드시 프로그램에게 허용된 행위만을 할 수있는 환경에 놓여야 한다. Java, .NET이 그 예시다.
근본적으로, 시스템은 프로그램이나 스크립트를 어떻게 신뢰하는가? Code Signing은 프로그램에 대한 전자서명이다. Code Signing은 운영체제 배포, 패치, 제3자 파티 도구, 모바일 앱에서 사용된다.
이 시리즈는 향후 공부를 거듭하면서 수정 될 예정입니다.