Skip to main content

첫 번째 코드 취약성 찾기 및 수정

데모 리포지토리에서 경고를 해결하여 code scanning 코드 보안의 기본 사항을 알아봅니다.

코딩을 학습할 때 실수로 프로젝트에 취약성을 가져오는 것은 정상입니다. 작업을 공유하기 전에 이러한 보안 문제가 해결되지 않으면 공격자는 이러한 문제를 사용하여 코드를 조작하고 중요한 데이터에 액세스할 수 있으므로 가능한 빨리 문제를 식별하고 패치하는 것이 중요합니다.

고맙게도 공용 리포지토리에서 취약성을 자동으로 찾고, 설명하고, 수정하는 도구 code scanning 가 있습니다. 이 자습서에서는 작업을 안전하게 유지하는 방법을 알아봅니다 code scanning.

데모 리포지토리 설정

먼저 보안 취약성이 있는 데모 프로젝트를 포크해 보겠습니다. 이 프로젝트는 간단한 웹 페이지를 빌드하지만, 프로젝트를 배포하지 않으므로, 이 연습에서는 보안 위험이 없습니다.

  1.        [
           `new2code/code-scanning-demo`
           ](https://github.com/new2code/code-scanning-demo) 리포지토리로 이동합니다.
    
  2. 페이지의 오른쪽 위에서 를 클릭합니다****.
  3. 표시되는 페이지에서 Create fork를 클릭하세요.

코드에서 취약성 찾기

이제 프로젝트를 설정했으므로 코드의 취약성을 확인하기 위해 포크에 대해 code scanning을(를) 활성화하겠습니다.

  1.        GitHub로 돌아가, 리포지토리의 홈페이지에서 **<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-shield" aria-label="shield" role="img"><path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg> Security and quality** 을 클릭합니다.
    
  2. "Code scanning 경고" 행에서 [설정]을 code scanning 클릭합니다.
  3. "도구" 섹션의 "CodeQL 분석" 옆에 있는 설정을 선택한 다음 기본값을 클릭합니다.
  4. 표시되는 팝업에서 [활성화 CodeQL]을 클릭합니다. 그러면 코드에서 GitHub Actions 취약성을 검사하는 워크플로가 트리거됩니다.
  5. 워크플로의 상태를 확인하려면 탐색 모음에서 클릭합니다****.
  6. 워크플로가 완료되면 탐색 모음에서 을 클릭합니다 Security and quality.
  7. 워크플로에서 code scanning 검색한 경고를 보려면 측면 탐색에서 Code scanning 을 클릭한 후, 반사형 교차 사이트 스크립팅을 클릭합니다.

경고 사항 이해하기

          code scanning 이제 코드의 취약성을 확인했으므로 경고에 제공된 정보를 세어보겠습니다.

위치

경고는 취약성을 만드는 코드 줄 중앙에 파일의 작은 미리 보기를 표시합니다. 이 경우, 취약성은 index.js 파일의 8줄에서 감지되었고, 사이트에 사용자가 제공한 입력을 구현합니다.

자세히 살펴보면 악성 코드를 확인하지 않고 greet를 사용자 입력에 할당할 때 7줄에서 기본 문제가 발생하는 것을 확인할 수 있습니다. 코드의 취약성에 대한 단계별 보기를 보려면 취약성 줄 아래 설명선에서 Show paths를 클릭하세요.

code scanning 경고가 있는 위치의 스크린샷. "Show paths" 단추는 주황색 윤곽선으로 표시됩니다.

설명 및 권장 사항

파일 미리 보기 code scanning 아래에서 취약성에 대한 자세한 설명을 제공합니다. 권장 수정 사항과 취약하고 고정된 코드의 예를 보려면 자세히 표시를 클릭합니다.

code scanning 경고의 세부 정보에 대한 스크린샷. "Show more"라는 레이블이 지정된 드롭다운이 주황색 윤곽선으로 표시됩니다.

이 경우, 사용자 입력을 사용하기 전에 정화하는 것이 좋습니다. 즉, 악성 코드에 대한 입력을 확인한 다음 필요한 경우 정리해야 합니다.

권장 수정 사항을 완전히 이해하지 못하는 경우 설명 해 달라고 요청 Copilot 채팅 하세요.

타임라인

마지막으로 페이지 아래쪽에서 경고의 타임라인을 볼 수 있습니다. 타임라인에는 취약성이 처음 감지된 커밋이 포함되며 취약성을 수정하면 자동으로 업데이트됩니다.

code scanning 경고의 타임라인에 대한 스크린샷.

자동으로 취약성 수정

프로젝트를 빠르고 쉽게 보호하려면 code scanning에 GitHub Copilot Autofix를 사용합시다.

  1. 경고 제목 아래에서 "이 경고의 수정 속도를 높이려면 Copilot 자동 수정을(를) 사용하십시오"라는 제안 상자가 있습니다. 을 클릭하십시오.

  2. 수정 제안을 생성한 후에 Copilot 는 제안된 변경 내용을 설명하고, 변경 내용의 미리 보기를 렌더링하고, 추가된 종속성을 호출합니다. **
    잠시 시간을 내어 Copilot의 작품을 읽어보십시오.

  3. 수정을 사용하여 끌어오기 요청을 만들려면 Commit to new branch를 클릭한 다음, Commit change를 클릭하세요.

  4. 초안 끌어오기 요청이 만들어지면 페이지 아래쪽에서 Ready for review를 클릭하여 병합할 수 있도록 합니다.

  5. 수정을 적용하려면 Merge pull request를 클릭한 다음 Confirm merge를 클릭하세요.

    끌어오기 요청이 병합되고 워크플로가 code scanning 다시 실행되면 경고가 자동으로 닫히고 취약성을 수정하는 커밋이 타임라인에 추가됩니다.

참고

실제 프로젝트에서는 코드를 커밋하기 전에 항상 제안된 Copilot 변경 내용을 검토해야 합니다.

다음 단계

이제 데모 리포지토리를 code scanning 사용해 보았으므로 사용자 고유의 프로젝트에서 이를 사용하도록 설정 하여 현재 및 미래의 취약성을 빠르게 찾아 수정할 수 있습니다.

이제 직접 작성한 코드의 보안을 확보했으니, 다음 단계로 넘어가 종속성의 보안 상태도 확인해 보세요. 첫 번째 종속성 취약성 찾기 및 수정하기을(를) 참조하세요.