CSS 1타 강사 · CONCEPT 16/25
Login에 성공했다는 사실이 왜 admin 권한을 뜻하지 않을까요?
Authentication은 사용자가 누구인지 확인하고, authorization은 인증된 사용자가 어떤 작업을 할 수 있는지 결정합니다. DB의 role 값을 browser가 보내는 대로 믿지 말고 server가 session과 정책을 기준으로 검사해야 합니다.
전문 용어를 보기 전에 이 장면부터 잡으세요
회사 출입증으로 신원을 확인해도 모든 방에 들어갈 권한이 생기는 것은 아닙니다.
누구인지 확인하는 것과 무엇을 해도 되는지는 다릅니다
00
한 장면으로 문제를 시작해 봅시다
이번 페이지에서 끝까지 따라갈 예시
Alice가 정상적으로 로그인한 뒤 URL의 user_id와 hidden role=admin 값을 바꾸어 다른 사용자의 관리 기능을 요청합니다.
비유와 실제 시스템을 정확히 연결하기
- 출입증으로 이름 확인authentication
- 특정 방 출입 권한 확인authorization
- 업무별 권한 묶음server-side role
이 예시에서 사람·장치·데이터·화살표를 먼저 찾습니다. 아직 용어를 완벽히 몰라도 “누가 무엇을 가지고, 어떤 처리를 거쳐, 무엇이 달라지는가”를 말할 수 있으면 출발점은 충분합니다.
01
긴 이름을 작은 용어로 분리하기
한 제목에 여러 단어가 들어 있어도 같은 기능을 뜻하지 않습니다. 아래 카드를 하나씩 읽고 각 용어의 대상과 역할을 따로 잡으세요.
보안이란 무엇을 지키는 것인가
컴퓨터 보안은 막연히 ‘안전하게 만들기’가 아니라 지켜야 할 성질을 구분하는 일에서 시작한다. 기밀성(Vertraulichkeit, confidentiality)은 허가받지 않은 사람이 내용을 읽지 못하게 하는 것, 무결성(Integrität, integrity)은 내용이 몰래 바뀌지 않았음을 확인하는 것, 진위성(Authentizität, authenticity)은 상대나 데이터의 출처가 주장과 맞는지 확인하는 것이다. 서비스가 필요할 때 계속 동작하는 성질은 가용성(Verfügbarkeit, availability)이라고 한다.
TERMS FROM ZERO
보안이란 무엇을 지키는 것인가 핵심 용어
아래 단어는 이미 안다고 가정하지 않습니다. 먼저 쉬운 뜻을 읽고, 본문에서 같은 단어가 나오면 이 정의로 다시 바꾸어 읽으세요.
Asset
공격자로부터 지키려는 대상입니다. 파일, 비밀번호, 서비스 가용성, 사람의 개인정보가 모두 asset이 될 수 있습니다.
Confidentiality
허가받지 않은 사람이 내용을 읽지 못하게 하는 기밀성입니다.
Integrity
데이터나 시스템이 허가 없이 바뀌지 않았음을 보장하려는 무결성입니다.
Availability
정당한 사용자가 필요할 때 서비스와 데이터에 접근할 수 있는 가용성입니다.
Browser, server, HTTP, HTML parser
Browser는 사용자의 client 프로그램이고 web server는 request를 받아 response를 만드는 프로그램이다. HTTP request에는 method, URL, header, body가 있고 response에는 status, header, body가 있다. Browser는 response body를 단순 글자가 아니라 HTML, JavaScript 같은 문법으로 해석(parse)한다. 외부 입력이 처음 들어오는 곳을 source, 그 입력이 실제 기능에 사용되는 위험한 도착점을 sink라고 부른다. 따라서 입력이 어느 문법 위치와 sink에 들어가는지가 보안에 매우 중요하다.
TERMS FROM ZERO
Browser, server, HTTP, HTML parser 핵심 용어
아래 단어는 이미 안다고 가정하지 않습니다. 먼저 쉬운 뜻을 읽고, 본문에서 같은 단어가 나오면 이 정의로 다시 바꾸어 읽으세요.
HTTP request
Browser나 client가 server에 method, path, headers, body를 담아 보내는 message입니다.
HTTP response
Server가 status, headers, body를 담아 client에 돌려주는 message입니다.
Parser / Interpreter
문자열을 HTML, JavaScript, SQL, shell 같은 문법으로 해석하는 구성요소입니다.
Context
같은 문자가 어느 문법의 어느 위치에 놓였는지를 뜻하며 올바른 encoding 방법을 결정합니다.
02
실제 시스템에서는 이 순서로 움직입니다
예시를 단계별로 해체하기
- 1단계Authentication이 password·MFA·certificate 등으로 사용자의 identity를 확인합니다.
- 2단계Server가 검증된 identity를 session에 연결합니다.
- 3단계요청마다 authorization이 이 identity가 해당 resource와 action을 수행할 수 있는지 검사합니다.
- 4단계Role은 여러 permission을 묶는 server-side 정책 정보입니다.
- 5단계Browser가 보낸 role·user_id·hidden field를 권한의 근거로 그대로 신뢰하면 안 됩니다.
- 6단계인증 성공과 권한 허용을 코드와 답안에서 별도 단계로 씁니다.
이 단계들은 시험 답안에서 원인과 결과가 빠지지 않도록 만든 설명 순서입니다.
손으로 따라가는 초보 예제
로그인한 Alice가 Bob 문서를 읽을 수 있는지 별도로 검사하기
Alice는 정상 login 후 `/documents/42`의 ID를 Bob 문서 ID 77로 바꿉니다.
- 1단계Password나 MFA 검증으로 Alice라는 identity가 확인됩니다.
- 2단계Server는 Alice identity를 session에 연결합니다.
- 3단계Alice가 URL ID를 77로 바꿔도 그 값은 client-controlled input일 뿐 권한 증거가 아닙니다.
- 4단계Server는 문서 77의 owner와 Alice의 permission을 매 request마다 확인해야 합니다.
- 5단계Hidden field `role=admin`도 browser가 수정할 수 있으므로 server 정책에서 role을 가져와야 합니다.
- 6단계Authentication 성공 후 authorization이 실패하면 request를 거부해야 합니다.
그래서 무엇을 배웠나? ‘누구인가’와 ‘이 resource에 이 action을 해도 되는가’는 별도의 질문입니다.
03
관련 개념도 하나씩 따로 이해하기
보안이란 무엇을 지키는 것인가
비유에서 실제 시스템으로 옮겨 보기
먼저 떠올릴 장면 · 봉투에 넣어 내용을 가리는 것은 기밀성, 봉인 스티커로 개봉 여부를 확인하는 것은 무결성, 발신인의 도장을 확인하는 것은 진위성, 우체국이 문을 열어 편지를 계속 전달하는 것은 가용성에 가깝다.
정확한 뜻 · 컴퓨터 보안은 막연히 ‘안전하게 만들기’가 아니라 지켜야 할 성질을 구분하는 일에서 시작한다. 기밀성(Vertraulichkeit, confidentiality)은 허가받지 않은 사람이 내용을 읽지 못하게 하는 것, 무결성(Integrität, integrity)은 내용이 몰래 바뀌지 않았음을 확인하는 것, 진위성(Authentizität, authenticity)은 상대나 데이터의 출처가 주장과 맞는지 확인하는 것이다. 서비스가 필요할 때 계속 동작하는 성질은 가용성(Verfügbarkeit, availability)이라고 한다.
- 1단계문제에서 숨김, 변조 탐지, 신원 확인, 서비스 중단 중 무엇을 묻는지 찾는다.
- 2단계한 기술이 네 목표를 모두 자동으로 제공한다고 가정하지 않는다.
- 3단계공격자가 무엇을 할 수 있는지와 지켜야 할 목표를 한 문장씩 분리한다.
Browser, server, HTTP, HTML parser
비유에서 실제 시스템으로 옮겨 보기
먼저 떠올릴 장면 · 같은 기호도 일반 편지 본문에서는 글자지만 계산식 칸에서는 연산자로 읽힌다. Browser도 입력이 HTML text, attribute, script 중 어디에 들어갔는지에 따라 다르게 해석한다.
정확한 뜻 · Browser는 사용자의 client 프로그램이고 web server는 request를 받아 response를 만드는 프로그램이다. HTTP request에는 method, URL, header, body가 있고 response에는 status, header, body가 있다. Browser는 response body를 단순 글자가 아니라 HTML, JavaScript 같은 문법으로 해석(parse)한다. 외부 입력이 처음 들어오는 곳을 source, 그 입력이 실제 기능에 사용되는 위험한 도착점을 sink라고 부른다. 따라서 입력이 어느 문법 위치와 sink에 들어가는지가 보안에 매우 중요하다.
- 1단계사용자 입력이 들어오는 source를 찾는다.
- 2단계입력이 출력·DB·명령으로 들어가는 sink를 찾는다.
- 3단계그 sink를 어떤 parser가 어떤 context로 읽는지 확인한다.
- 4단계공격 영향과 context에 맞는 방어를 연결한다.
04
강의 스크립트 원본과 연결하기
Authentication과 access-control model를 보여 주는 대표 슬라이드입니다. 먼저 위의 초보 설명을 읽고, 원본에서는 같은 개념이 어떤 기호와 독일어·영어 용어로 표현되는지 확인하세요.
Vorlesung/05 Authentifizierung.pdf · p.3, p.48, p.53 · Authentication과 access-control model05 Authentifizierung.pdf· p.3, p.48, p.53
05
시험 함정과 답안에 적용하기
- 보안이란 무엇을 지키는 것인가 · TLS, 암호화, 서명, hash처럼 익숙한 단어가 나오더라도 그 기술이 제공하지 않는 목표까지 확대해서 쓰면 안 된다.
- Browser, server, HTTP, HTML parser · 입력 문자열 자체만 보고 취약점을 이름 붙이지 말고 source에서 sink까지 실제 흐름을 추적한다.
서술형 답안 골격
identity check와 server-side role/permission check를 별도 단계로 적습니다.
정의 → 등장 주체 또는 입력 → 작동 순서 → 보안 효과 → 조건과 한계 순서로 쓰고, 위 단계별 예시에서 필요한 문장을 골라 붙이세요.
책을 덮고 “Login에 성공했다는 사실이 왜 admin 권한을 뜻하지 않을까요?”에 대해 핵심 용어 두 개, 작동 단계 세 개, 대표 함정 하나를 말해 보세요.
다음 개념으로 넘어가기 전 확인
- Login 성공이 모든 resource 권한을 주지 않는 이유는?
- Hidden field를 권한 근거로 쓰면 안 되는 이유는?
- Authorization 검사는 언제 수행해야 하는가?