Skip to content

Commit acf1956

Browse files
authored
Merge pull request #19 from dev-bookclub/dowoon
Chapter07, 08
2 parents 6bf97fc + b715b9c commit acf1956

2 files changed

Lines changed: 115 additions & 0 deletions

File tree

dowoon/chapter07.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# 인증·인가
2+
3+
## 인증과 인가 차이
4+
5+
### 인증
6+
- 인증(Authentication)는 통신 상대가 누구(또는 무엇)인지 확인하는 것
7+
- AuthN으로 줄이기도 하며 로그인이 대표적인 인증 기능
8+
- 비밀번호, 지문 등의 정보를 이용해 로그인을 시도하는 사용자가 보인인지 확인
9+
10+
### 인증 3요소
11+
1. **지식 정보**: 비밀번호 등 사용자만 알고 있는 정보
12+
2. **소지 정보**: 스마트폰, 보안키, IC카드 등 물리적으로 갖고 있는 정보
13+
3. **생체 정보**: 지문, 얼굴, 홍채 등 생물학적 정보
14+
15+
### 인가
16+
- 인가(Authorization)는 통신 상대에게 특정한 '권한'을 부여하는 것을 의미하며 AuthZ로 줄이기도 함.
17+
- 웹 로그인 시 사용자는 인증과 동시에 인가를 받음(ex.로그인한 사용자만 게시물 확인 가능)
18+
- 이와 같은 권한 부여를 인가라고 함.
19+
20+
## 인증 기능의 보안 리스크
21+
22+
### 인증 방식 종류
23+
- **비밀번호 인증**: 가장 보편적, 보안 관련 위험도가 높으며 반드시 HTTPS를 사용해야 함
24+
- **SMS 인증**: 로그인에 필요한 링크나 코드 등 정보를 SMS로 전송
25+
- **소셜 로그인**: 구글, 트위터 등 소셜 서비스 계정으로 로그인
26+
- **FIDO**: Fast Identity Online의 약자로 지문, 얼굴, 코드 등을 바탕으로 한 공개키, 비밀키로 인증
27+
- **WebAuthn**: FIDO 기술인 'FIDO2'를 기반으로 한 Web Authentication
28+
29+
### 비밀번호 인증에 대한 공격
30+
- 브루트 포스(brute force) 공격: 이론적으로 가능한 모든 패턴을 대입하여 공격
31+
- 사전 공격: 비밀번호에 자주 등장하는 단순한 문자열의 입력을 반복하는 공격
32+
- 비밀번호 리스크 공격: 유출된 다른 서비스의 비밀번호
33+
- 리버스 부르트 포스 공격: 비밀번호를 고정하고 ID를 변경하면서 반복 인증 시도
34+
35+
### 비밀번호 인증 공격에 대한 대책
36+
37+
#### 1) 복합 인증
38+
- 지식 정보, 소지 정보, 생체 정보 등 여러가지 인증 요소를 조합하여 사용
39+
- 이중 요소 인증 → 비밀번호 인증 후 SMS로 전송되는 코드로 2차 확인
40+
41+
#### 2) 계정 잠금 기능
42+
- 로그인 일정 횟수만큼 실패 시 해상 사용자 ID에 잠금을 걸어 브루트 포스 공격 방지
43+
44+
## 로그인 정보 유출 주의
45+
#### 1) 웹 분석 서비스 이용에 주의
46+
- 키보드, 마우스 조작을 추적해 어느 폼이나 버튼이 사용됐는지 분석해주는 서비스 존재
47+
- 폼에서 입력된 ID, 비밀번호 등이 유출된 가능 성 존재
48+
49+
#### 2) 브라우저 기능 정보를 저장할 때 주의
50+
- HTTPS 연결 시에만 쿠키를 보내는 Secure 속성 및 자바스크립트 접근을 막는 HttpOnly 속성 사용
51+

dowoon/chapter08.md

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
# 라이브러리를 노린 보안 리스크
2+
3+
## 라이브러리 사용
4+
5+
### 오픈소스 소프트웨어 사용
6+
- 많은 라이브러리, 프레임워크, 툴 등이 오픈소스 소프트웨어(OSS)로 개발
7+
- 코드가 모두에게 공개되고 원활하게 유지보수되지 않는 경우도 많음
8+
9+
### 프론트엔드 라이브러리 상황
10+
- 프론트엔드에 사용되는 많은 라이브러리가 OSS로 개발됐으며 CDN, npmjs.com을 통해 배포
11+
12+
#### CDN을 통해 배포되는 라이브러리
13+
- CDN에서 바로 전송 혹은 브라우저에서 HTML, JS를 이용해 직접 CDN 리소스를 가져올 수 있음
14+
```html
15+
<script crossorigin src="https://cdn.example.com/dompurify/purify.min.js"></script>
16+
```
17+
18+
## 라이브러리에 숨어있는 보안 리스크
19+
20+
### 서드파티 라이브러리를 경유하는 공격
21+
- 직접 공격하는 게 아닌 서드파티가 작성한 라이브러리 등을 통한 간접적인 공격이 증가
22+
- 오픈소스 라이브러리에 악성 코드를 주입하면 공격 가능
23+
24+
### 리뷰가 충분하지 않은 코드에 의한 취약성
25+
- 코드 리뷰가 충분하지 않은 상태에서 merge하여 악성코드가 포함될 수 있음.
26+
27+
### 계정 탈취에 의한 취약성
28+
- 라이브러리 개발자와 유지보수하는 계정이 탈취되어 악성코드가 포함될 수 있음.
29+
30+
### 의존 관계 상속에 의한 취약성
31+
- 라이브러리가 또 다른 라이브러리를 의존할 수 있기 때문에 의존 관계에 의해 악성코드가 포함될 수 있음.
32+
33+
### CDN에서 콘텐츠 변조
34+
- CDN의 라이브러리가 변조 시 라이브러릴 사용하는 브라저에서 악성코드 실행 가능
35+
36+
### CDN에서 취약성을 갖는 버전의 라이브러리 가져오기
37+
- CDN 사용 시 CSP를 통해 신뢰할 수 있는 CDN만을 가져올 수 있도록 설정 가능
38+
```text
39+
Content-Security-Policy: script-src https://cdn.example.com
40+
```
41+
- 취약성이 있는 버전을 명시적으로 사용하지 않아도 취약성이 있는 버전 배포중일 시 우회 가능
42+
43+
## 라이브러리 사용의 보안 대책
44+
45+
### 취약성을 확인하는 툴과 서비스 사용
46+
47+
#### 커맨드로 취약성 검사
48+
- `npm audit`이라는 커맨드를 통해 취약점이 포함된 버전의 포함 여부 확인
49+
- `npm audit fix`라는 커맨드를 통해 취약점이 포함된 버전의 자동 업데이트 가능
50+
51+
#### 정기적으로 취약성 확인
52+
- Dependabot 등을 통해 레포지터리에서 사용하는 라이브러리에 알려진 취약점이 있는지 정기적으로 확인
53+
54+
### 유지보수가 꾸준한 라이브러리 사용
55+
- 라이브러리의 최종 커밋 날짜와 이슈 대응 상태 등을 통해 유지보수의 지속성 확인
56+
57+
### 최신 버전 라이브러리 사용
58+
- Renovate 등과 같은 서비스를 통해 사용중인 라이브러리의 새로운 버전 업데이트를 확인
59+
60+
### 하위 지원 무결성을 통한 변조 확인
61+
- 브라우저는 서버에서 가져온 리소스에 변조가 없는지 확인하는 하위 지원 무결성(subresource integrity) 기능을 제공
62+
63+
### CDN에서 불러오는 라이브러리 버전 저장
64+
- 고정된 버전의 라이브러리를 불러와 이전 라이브러리를 불러오는 것을 방지

0 commit comments

Comments
 (0)