코딩을 학습할 때 실수로 프로젝트에 취약성을 가져오는 것은 정상입니다. 작업을 공유하기 전에 이러한 보안 문제가 해결되지 않으면 공격자는 이러한 문제를 사용하여 코드를 조작하고 중요한 데이터에 액세스할 수 있으므로 가능한 빨리 문제를 식별하고 패치하는 것이 중요합니다.
다행히, 공용 리포지토리에서 취약성을 자동으로 찾고, 설명하고 수정까지 하는 code scanning과 같은 도구가 있습니다. 이 자습서에서는 code scanning을 사용하여 작업을 안전하게 유지하는 방법을 알아봅니다.
데모 리포지토리 설정
먼저 보안 취약성이 있는 데모 프로젝트를 포크해 보겠습니다. 이 프로젝트는 간단한 웹 페이지를 빌드하지만, 프로젝트를 배포하지 않으므로, 이 연습에서는 보안 위험이 없습니다.
new2code/code-scanning-demo
리포지토리로 이동합니다.- 페이지의 오른쪽 위에서 Fork를 클릭하세요.
- 표시되는 페이지에서 Create fork를 클릭하세요.
코드에서 취약성 찾기
이제 프로젝트를 설정했습니다. 포크가 코드의 취약성을 확인하도록 code scanning을 켜겠습니다.
- GitHub로 돌아가서 리포지토리의 홈 페이지에서 Security를 클릭하세요.
- "Code scanning alerts" 행에서 Set up code scanning 을 클릭하세요.
- "Tools" 섹션의 "CodeQL analysis" 옆에 있는 Set up을 선택한 다음 Default를 클릭하세요.
- 표시되는 팝업에서 Enable CodeQL 를 클릭하세요. 그러면 코드에서 취약성을 검사하는 GitHub Actions 워크플로가 트리거됩니다.
- 워크플로의 상태를 확인하려면 탐색 표시줄에서 Actions를 클릭하세요.
- 워크플로가 완료되면 탐색 표시줄에서 Security를 클릭하세요.
- 워크플로에서 발견된 code scanning 경고를 보려면 측면 탐색에서 Code scanning 을 클릭한 다음, Reflected cross-site scripting을 클릭하세요.
code scanning 경고 해석
이제 code scanning이 코드에서 취약성을 식별했습니다. 경고에 제공된 정보를 분석해 보겠습니다.
위치
경고는 취약성을 만드는 코드 줄 중앙에 파일의 작은 미리 보기를 표시합니다. 이 경우, 취약성은 index.js
파일의 8줄에서 감지되었고, 사이트에 사용자가 제공한 입력을 구현합니다.
자세히 살펴보면 악성 코드를 확인하지 않고 greet
를 사용자 입력에 할당할 때 7줄에서 기본 문제가 발생하는 것을 확인할 수 있습니다. 코드의 취약성에 대한 단계별 보기를 보려면 취약성 줄 아래 설명선에서 Show paths를 클릭하세요.
설명 및 권장 사항
code scanning은 파일 미리 보기 아래에 취약성에 대한 자세한 설명을 제공합니다. 취약성과 수정 코드의 예제뿐만 아니라, 권장된 수정을 보려면 Show more 를 클릭하세요.
이 경우 사용자 입력을 사용하기 전에 삭제하는 것이 좋습니다. 즉, 악성 코드에 대한 입력을 확인한 다음 필요한 경우 정리해야 합니다.
팁
권장된 수정을 완전히 이해하지 못하면, Copilot 채팅에 설명을 요청하세요.
타임라인
마지막으로 페이지 아래쪽에서 경고의 타임라인을 볼 수 있습니다. 타임라인에는 취약성이 처음 감지된 커밋이 포함되며 취약성을 수정하면 자동으로 업데이트됩니다.
자동으로 취약성 수정
프로젝트를 빠르고 쉽게 보안하기 위해 code scanning용 GitHub Copilot Autofix를 사용하겠습니다.
-
경고 제목 아래 "CodeQL에 대해 Copilot Autofix를 사용하여 이 경고의 수정을 가속화"할 것을 제안하는 상자에서 Generate fix를 클릭하세요.
-
Copilot이 수정 제안을 생성하면 제안하는 변경 사항을 설명하고, 변경 사항의 미리 보기를 렌더링하고, 종속성 강화를 호출합니다. 잠시 시간을 내어 Copilot의 작업을 읽어보세요.
-
수정을 사용하여 끌어오기 요청을 만들려면 Commit to new branch를 클릭한 다음, Commit change를 클릭하세요.
-
초안 끌어오기 요청이 만들어지면 페이지 아래쪽에서 Ready for review를 클릭하여 병합할 수 있도록 합니다.
-
수정을 적용하려면 Merge pull request를 클릭한 다음 Confirm merge를 클릭하세요.
끌어오기 요청이 병합되고 code scanning 워크플로가 다시 실행되면 경고가 자동으로 닫히고 취약성을 수정하는 커밋이 타임라인에 추가됩니다.
참고 항목
실제 프로젝트에서는 Copilot에서 제안한 변경 내용을 코드에 커밋하기 전에 항상 검토해야 합니다.
다음 단계
이제 데모 리포지토리에서 code scanning 사용을 시도했습니다. 자신의 프로젝트에서 이를 사용하도록 설정하여 현재 및 미래 취약성을 빨리 찾아서 수정할 수 있습니다.