Skip to content

Security: Life-00/RedHorse

Security

SECURITY.md

๐Ÿ”’ ๋ณด์•ˆ ์ •์ฑ… (Security Policy)

์ง€์›๋˜๋Š” ๋ฒ„์ „

ํ˜„์žฌ ๋ณด์•ˆ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐ›๋Š” ShiftSync ๋ฒ„์ „:

Version Supported
1.0.x โœ…
< 1.0 โŒ

๐Ÿšจ ๋ณด์•ˆ ์ทจ์•ฝ์  ๋ณด๊ณ 

ShiftSync์˜ ๋ณด์•ˆ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ๋ฐœ๊ฒฌํ•˜์…จ๋‹ค๋ฉด ์ฑ…์ž„๊ฐ ์žˆ๊ฒŒ ๊ณต๊ฐœํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋ณด๊ณ  ๋ฐฉ๋ฒ•

โš ๏ธ ๊ณต๊ฐœ ์ด์Šˆ๋กœ ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ๋ณด๊ณ ํ•˜์ง€ ๋งˆ์„ธ์š”!

๋Œ€์‹  ๋‹ค์Œ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š”:

  1. ์ด๋ฉ”์ผ: security@shiftsync.com
  2. GitHub Security Advisory: Create a security advisory

๋ณด๊ณ ์„œ์— ํฌํ•จํ•  ์ •๋ณด

๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ๋ณด๊ณ ํ•  ๋•Œ ๋‹ค์Œ ์ •๋ณด๋ฅผ ํฌํ•จํ•ด์ฃผ์„ธ์š”:

  • ๐Ÿ” ์ทจ์•ฝ์  ์œ ํ˜• (์˜ˆ: SQL Injection, XSS, CSRF ๋“ฑ)
  • ๐Ÿ“ ์˜ํ–ฅ์„ ๋ฐ›๋Š” ํŒŒ์ผ/๊ฒฝ๋กœ
  • ๐Ÿ“ ์ทจ์•ฝ์  ์žฌํ˜„ ๋‹จ๊ณ„
  • ๐Ÿ’ฅ ์ž ์žฌ์  ์˜ํ–ฅ
  • ๐Ÿ› ๏ธ ๊ฐ€๋Šฅํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• (์„ ํƒ์‚ฌํ•ญ)
  • ๐Ÿ“ง ์—ฐ๋ฝ์ฒ˜ ์ •๋ณด

๋ณด๊ณ ์„œ ์˜ˆ์‹œ

**์ทจ์•ฝ์  ์œ ํ˜•**: SQL Injection

**์˜ํ–ฅ์„ ๋ฐ›๋Š” ์ปดํฌ๋„ŒํŠธ**: 
- backend/lambda/schedule_management/handler.py
- Line 145-150

**์žฌํ˜„ ๋‹จ๊ณ„**:
1. /users/{user_id}/schedules ์—”๋“œํฌ์ธํŠธ์— ์ ‘๊ทผ
2. ๋‹ค์Œ ํŽ˜์ด๋กœ๋“œ ์ „์†ก: `{"date": "2024-01-01' OR '1'='1"}`
3. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋จ

**์ž ์žฌ์  ์˜ํ–ฅ**:
- ๋ฌด๋‹จ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ
- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ •๋ณด ์œ ์ถœ

**์ œ์•ˆ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•**:
- Prepared statements ์‚ฌ์šฉ
- ์ž…๋ ฅ ๊ฐ’ ๊ฒ€์ฆ ๊ฐ•ํ™”

๐Ÿ“‹ ๋ณด์•ˆ ์ทจ์•ฝ์  ์ฒ˜๋ฆฌ ํ”„๋กœ์„ธ์Šค

1. ์ ‘์ˆ˜ (24์‹œ๊ฐ„ ์ด๋‚ด)

  • ๋ณด๊ณ ์„œ ์ ‘์ˆ˜ ํ™•์ธ
  • ์ดˆ๊ธฐ ํ‰๊ฐ€ ์‹œ์ž‘

2. ํ‰๊ฐ€ (3-5์ผ)

  • ์ทจ์•ฝ์  ์žฌํ˜„ ๋ฐ ๊ฒ€์ฆ
  • ์‹ฌ๊ฐ๋„ ํ‰๊ฐ€ (Critical, High, Medium, Low)
  • ์˜ํ–ฅ ๋ฒ”์œ„ ๋ถ„์„

3. ์ˆ˜์ • (์‹ฌ๊ฐ๋„์— ๋”ฐ๋ผ)

  • Critical: 24-48์‹œ๊ฐ„
  • High: 1์ฃผ์ผ
  • Medium: 2์ฃผ์ผ
  • Low: ๋‹ค์Œ ์ •๊ธฐ ๋ฆด๋ฆฌ์Šค

4. ๊ณต๊ฐœ

  • ํŒจ์น˜ ๋ฐฐํฌ ํ›„ 30์ผ ๋’ค ๊ณต๊ฐœ
  • ๋ณด๊ณ ์ž์™€ ํ˜‘์˜ํ•˜์—ฌ ๊ณต๊ฐœ ์‹œ๊ธฐ ์กฐ์ • ๊ฐ€๋Šฅ
  • CVE ๋ฒˆํ˜ธ ํ• ๋‹น (ํ•„์š”์‹œ)

๐Ÿ† ๋ณด์•ˆ ์—ฐ๊ตฌ์ž ์ธ์ •

๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ์ฑ…์ž„๊ฐ ์žˆ๊ฒŒ ๋ณด๊ณ ํ•ด์ฃผ์‹  ๋ถ„๋“ค์„ SECURITY_HALL_OF_FAME.md์— ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค (๋™์˜ํ•˜์‹  ๊ฒฝ์šฐ).

๐Ÿ›ก๏ธ ๋ณด์•ˆ ๋ชจ๋ฒ” ์‚ฌ๋ก€

์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ๋ณด์•ˆ ๊ฐ€์ด๋“œ

1. ๊ฐ•๋ ฅํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์‚ฌ์šฉ

โœ… Good: MyP@ssw0rd!2024#ShiftSync
โŒ Bad: password123

2. 2๋‹จ๊ณ„ ์ธ์ฆ ํ™œ์„ฑํ™”

  • AWS Cognito MFA ์„ค์ • ๊ถŒ์žฅ
  • ์ธ์ฆ ์•ฑ ์‚ฌ์šฉ (Google Authenticator, Authy ๋“ฑ)

3. ์ •๊ธฐ์ ์ธ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ

  • ์ตœ์†Œ 3๊ฐœ์›”๋งˆ๋‹ค ๋ณ€๊ฒฝ
  • ๋‹ค๋ฅธ ์„œ๋น„์Šค์™€ ๋™์ผํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์‚ฌ์šฉ ๊ธˆ์ง€

4. ์˜์‹ฌ์Šค๋Ÿฌ์šด ํ™œ๋™ ๋ณด๊ณ 

  • ๋น„์ •์ƒ์ ์ธ ๋กœ๊ทธ์ธ ์‹œ๋„
  • ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ
  • ์ด์ƒํ•œ ์ด๋ฉ”์ผ ์ˆ˜์‹ 

๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ๋ณด์•ˆ ๊ฐ€์ด๋“œ

1. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๊ด€๋ฆฌ

# โŒ ์ ˆ๋Œ€ ์ปค๋ฐ‹ํ•˜์ง€ ๋งˆ์„ธ์š”
.env
.env.local
backend/.env

# โœ… .gitignore์— ์ถ”๊ฐ€
echo ".env" >> .gitignore
echo "backend/.env" >> .gitignore

2. AWS ์ž๊ฒฉ ์ฆ๋ช… ๋ณดํ˜ธ

# โŒ ํ•˜๋“œ์ฝ”๋”ฉ ๊ธˆ์ง€
aws_access_key = "AKIAIOSFODNN7EXAMPLE"

# โœ… ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์‚ฌ์šฉ
aws_access_key = os.environ.get('AWS_ACCESS_KEY_ID')

3. SQL Injection ๋ฐฉ์ง€

# โŒ ๋ฌธ์ž์—ด ํฌ๋งทํŒ… ์‚ฌ์šฉ ๊ธˆ์ง€
query = f"SELECT * FROM users WHERE id = {user_id}"

# โœ… Prepared statements ์‚ฌ์šฉ
query = "SELECT * FROM users WHERE id = %s"
cursor.execute(query, (user_id,))

4. XSS ๋ฐฉ์ง€

// โŒ dangerouslySetInnerHTML ์‚ฌ์šฉ ๊ธˆ์ง€
<div dangerouslySetInnerHTML={{__html: userInput}} />

// โœ… ํ…์ŠคํŠธ๋กœ ๋ Œ๋”๋ง
<div>{userInput}</div>

5. CORS ์„ค์ •

# โœ… ํ”„๋กœ๋•์…˜์—์„œ๋Š” ํŠน์ • ๋„๋ฉ”์ธ๋งŒ ํ—ˆ์šฉ
headers = {
    'Access-Control-Allow-Origin': 'https://shiftsync.com',
    'Access-Control-Allow-Methods': 'GET,POST,PUT,DELETE',
    'Access-Control-Allow-Headers': 'Content-Type,Authorization'
}

๐Ÿ” ๋ฐ์ดํ„ฐ ๋ณด์•ˆ

์ €์žฅ ๋ฐ์ดํ„ฐ

  • โœ… AWS RDS ์•”ํ˜ธํ™” ํ™œ์„ฑํ™”
  • โœ… ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋Š” ์•”ํ˜ธํ™”ํ•˜์—ฌ ์ €์žฅ
  • โœ… ์ •๊ธฐ์ ์ธ ๋ฐฑ์—… ์ˆ˜ํ–‰

์ „์†ก ๋ฐ์ดํ„ฐ

  • โœ… HTTPS/TLS ์‚ฌ์šฉ (CloudFront)
  • โœ… API ์š”์ฒญ์— ์ธ์ฆ ํ† ํฐ ํฌํ•จ
  • โœ… ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋Š” POST body์— ํฌํ•จ

๊ฐœ์ธ์ •๋ณด

  • โœ… ์ตœ์†Œํ•œ์˜ ์ •๋ณด๋งŒ ์ˆ˜์ง‘
  • โœ… ์‚ฌ์šฉ์ž ๋™์˜ ํ›„ ์ˆ˜์ง‘
  • โœ… ์ •๊ธฐ์ ์ธ ๋ฐ์ดํ„ฐ ์ •๋ฆฌ

๐Ÿ“š ๋ณด์•ˆ ๊ด€๋ จ ๋ฆฌ์†Œ์Šค

AWS ๋ณด์•ˆ ๊ฐ€์ด๋“œ

OWASP ๋ฆฌ์†Œ์Šค

๋ณด์•ˆ ๋„๊ตฌ

  • npm audit - ํ”„๋ก ํŠธ์—”๋“œ ์˜์กด์„ฑ ๊ฒ€์‚ฌ
  • Safety - Python ์˜์กด์„ฑ ๊ฒ€์‚ฌ
  • AWS Security Hub - AWS ๋ฆฌ์†Œ์Šค ๋ณด์•ˆ ๊ฒ€์‚ฌ

๐Ÿ”„ ์ •๊ธฐ ๋ณด์•ˆ ์ ๊ฒ€

์›”๊ฐ„

  • ์˜์กด์„ฑ ์—…๋ฐ์ดํŠธ ํ™•์ธ
  • ๋ณด์•ˆ ํŒจ์น˜ ์ ์šฉ
  • ์•ก์„ธ์Šค ๋กœ๊ทธ ๊ฒ€ํ† 

๋ถ„๊ธฐ๋ณ„

  • ๋ณด์•ˆ ๊ฐ์‚ฌ ์ˆ˜ํ–‰
  • ์นจํˆฌ ํ…Œ์ŠคํŠธ
  • ๋ณด์•ˆ ์ •์ฑ… ๊ฒ€ํ† 

์—ฐ๊ฐ„

  • ์ „์ฒด ๋ณด์•ˆ ํ‰๊ฐ€
  • ์žฌํ•ด ๋ณต๊ตฌ ๊ณ„ํš ํ…Œ์ŠคํŠธ
  • ๋ณด์•ˆ ๊ต์œก ์‹ค์‹œ

๐Ÿ“ž ์—ฐ๋ฝ์ฒ˜

๋ณด์•ˆ ๊ด€๋ จ ๋ฌธ์˜:

  • ๐Ÿ“ง Email: security@shiftsync.com
  • ๐Ÿ”’ PGP Key: [๊ณต๊ฐœ ํ‚ค ๋งํฌ]
  • โฐ ์‘๋‹ต ์‹œ๊ฐ„: 24์‹œ๊ฐ„ ์ด๋‚ด

์ผ๋ฐ˜ ๋ฌธ์˜:


๐Ÿ™ ๊ฐ์‚ฌ์˜ ๋ง

ShiftSync์˜ ๋ณด์•ˆ์„ ๊ฐœ์„ ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ฃผ์‹  ๋ชจ๋“  ๋ณด์•ˆ ์—ฐ๊ตฌ์ž๋ถ„๋“ค๊ป˜ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.


๋ณด์•ˆ์€ ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ์ฑ…์ž„์ž…๋‹ˆ๋‹ค ๐Ÿ”’

There aren't any published security advisories