FossID docs kr
  • FossID 소개
    • FossID란
    • FossID 구성
      • 운영 방식
      • 시스템 구성
      • 실행 환경
    • 주요 기능
      • FossID Knowledge Base
      • 다양한 오픈소스 탐지 방식
      • 라이선스 카테고리
      • Snippet Search
      • Quick View
      • 패키지 디펜던시 라이브러리 자동 식별(FossID-DA)
      • Blind Audit
      • SPDX/Cyclone DX 레포트 Import
      • Vuln Snippet Finder
    • 연동 예시
      • Jira 연동
      • Continuous Scanning (CLI 스캐너 적용)
      • Continuous Scanning (WebApp)
  • 사용 매뉴얼
    • Webapp 메뉴 소개
      • Dashboard
      • Projects
        • 승인 정책
        • 화이트리스트
      • Scans
        • Import SPDX/CycloneDX
      • Components
        • Component 생성
        • Component intake 기능
      • Licenses
        • License 카테고리
        • License 생성
      • Vulnerabilities
        • 취약점 악용 가능성(VEX)
        • 취약점 사용자 역할 및 권한
        • CycloneDX SBOM에서 VEX import/export
      • Tools
        • Quick View
        • Snippet Search
        • VSF (VulnSnippet Finder)
      • Users
        • User
        • Role
        • Permission
      • System Utils
      • Help
        • FossID 사용법
        • API test
        • Approval Policy
      • Message
  • 프로젝트 및 스캔
    • Project 및 Scan 생성
      • Project 생성
      • Scan 생성
    • Scan 진행
    • Scan 검증 진행
      • Scan 인터페이스
      • 파일 단위 검증
      • 폴더 단위 검증
      • String Match Rules
      • Dependency 분석
      • 보안취약점 확인
      • 보고서 생성
  • FossID 업데이트
    • FossID 최신 버전 안내
      • 업데이트 가이드(23.1 버전 미만)
      • 업데이트 가이드(23.1 버전 이상)
Powered by GitBook
On this page
  • 작동 원리
  • WebApp 사용
  • 클라이언트 사용
  1. 사용 매뉴얼
  2. Webapp 메뉴 소개
  3. Tools

VSF (VulnSnippet Finder)

PreviousSnippet SearchNextUsers

Last updated 17 days ago

VSF는 Snippet 코드 단위로 보안 취약점 확인이 가능합니다.

일반적인 프로세스에서 취약점을 감지할 경우, 스캔한 파일과 취약한 파일 간에 파일 match가 full인 항목을 찾습니다. VSF를 사용하면 한 단계 더 나아가 파일 match가 full이 아닌 경우에도 스캔한 코드에 포함된 취약한 코드 Snippet을 찾을 수 있습니다.

따라서 프로젝트를 취약하게 만드는 정확한 코드 라인을 찾을 수 있습니다.

작동 원리

VSF는 확장된 클라이언트 기능을 사용하여 취약한 Snippet 검사를 수행합니다. 이 기능은 클라이언트 및 WebApp에서 액세스할 수 있습니다. 코드는 FossID security volume과 비교됩니다. (security volume이 활성화되어야 함)

WebApp 사용

WebApp은 코드를 스캔하고 취약한 코드 Snippet을 찾기 위한 테스트 인터페이스를 제공합니다. 이 인터페이스를 사용하여 코드를 업로드하고 볼 수 있습니다.

이 기능은 User에게 VSF_ACCESS 권한을 추가하여 WebApp에서 액세스할 수 있습니다. 이 권한은 WebApp의 VSF 인터페이스에 대한 액세스 권한만 부여합니다. WebApp 또는 CLI를 사용하여 파일을 Scan할 때 실제로 VSF 결과를 얻으려면 VSF enabled cli token을 구성해야 합니다.

WebApp에서 VSF에 액세스할 때 Scan을 위해 소스코드를 업로드할 수 있는 초기 인터페이스가 제공됩니다.

스캔이 수행된 후 CVSS Base Score 심각도별로 그룹화된 개요 정보가 표시됩니다. (CVSS2 및 CVSS3 모두 고려됨)

각 CVE는 취약점 설명과 함께 나열됩니다. 항목을 확장하면 각 취약점이 존재하는 파일 목록을 볼 수 있습니다.

파일을 선택하면 해당 보안 메타데이터와 함께 발견된 모든 CVE에 대한 정보가 제공되고 security volume에서 발견된 코드와 로컬 코드를 강조 표시하는 매칭 항목이 표시됩니다.

클라이언트 사용

매개변수 --vsf를 사용하여 대상 코드의 취약점을 스캔할 수 있습니다. 이 작업을 수행하려면 시스템에 jq를 설치해야 합니다.

Debian 기반 시스템에 jq를 설치하려면 다음을 실행하십시오.

sudo apt install jq

RedHat 또는 CentOS에 jq를 설치하려면 다음을 실행하십시오.

sudo yum install jq

사용 예시

./fossid-cli --vsf '/tmp/t1_lib.c'

결과

하기는 가독성을 위해 축약된 결과입니다.

{
    "date": "2020-11-03T12:32:33Z",
    "file": {
        "available": true,
        "encoding": "UTF-8",
        "id": "c66dd54d05901afad2a2eaa900000000",
        "md5": "c66dd54d05901afad2a2eaa900000000",
        "path": "CVE-2016-2177",
        "size": 145142
    },
    "local_path": "/tmp/t1_lib.c",
    "snippet": {
        "id": "37b03c7c0df744a1659a44cd06f6b0a3",
        "local_coverage": 0.03,
        "local_highlight": {
            "blocks": [
                {
                    "byte_range": {
                        "begin": 39643,
                        "end": 39765
                    },
                    "char_range": {
                        "begin": 39643,
                        "end": 39765
                    },
                    "hash_range": {
                        "begin": 1017,
                        "end": 1022
                    },
                    "id": "12bff91f4092e0405ccbac07d92b155c"
                }
            ],
            "encoding": "UTF-8",
            "id": "37b03c7c0df744a1659a44cd06f6b0a3",
            "pfm_format": 2
        },
        "local_size": 54,
        "remote_coverage": 0.02,
        "remote_highlight": {
            "blocks": [
                {
                    "byte_range": {
                        "begin": 85581,
                        "end": 85732
                    },
                    "char_range": {
                        "begin": 85581,
                        "end": 85732
                    },
                    "hash_range": {
                        "begin": 2066,
                        "end": 2071
                    },
                    "id": "12bff91f4092e0405ccbac07d92b155c"
                }
            ],
            "encoding": "UTF-8",
            "id": "37b03c7c0df744a1659a44cd06f6b0a3",
            "pfm_format": 2
        },
        "remote_size": 54
    },
    "type": "vulnerability",
    "vulnerability": {
        "details": {
            "configurations": {
                "CVE_data_version": "4.0",
                "nodes": [
                    {
                        "cpe_match": [
                            {
                                "cpe23Uri": "cpe:2.3:a:hp:icewall_sso:10.0:*:*:*:dfw:*:*:*",
                                "vulnerable": true
                            }
                        ],
                        "operator": "OR"
                    }
                ]
            },
            "cve": {
                "CVE_data_meta": {
                    "ASSIGNER": "cve@mitre.org",
                    "ID": "CVE-2016-2177"
                },
                "data_format": "MITRE",
                "data_type": "CVE",
                "data_version": "4.0",
                "description": {
                    "description_data": [
                        {
                            "lang": "en",
                            "value": "OpenSSL through 1.0.2h incorrectly uses pointer arithmetic for heap-buffer boundary checks, which might allow remote attackers to cause a denial of service (integer overflow and application crash) or possibly have unspecified other impact by leveraging unexpected malloc behavior, related to s3_srvr.c, ssl_sess.c, and t1_lib.c."
                        }
                    ]
                },
                "problemtype": {
                    "problemtype_data": [
                        {
                            "description": [
                                {
                                    "lang": "en",
                                    "value": "CWE-190"
                                }
                            ]
                        }
                    ]
                },
                "references": {
                    "reference_data": [
                        {
                            "name": "https://git.openssl.org/?p=openssl.git;a=commit;h=a004e72b95835136d3f1ea90517f706c24c03da7",
                            "refsource": "CONFIRM",
                            "tags": [
                                "Issue Tracking",
                                "Patch",
                                "Third Party Advisory"
                            ],
                            "url": "https://git.openssl.org/?p=openssl.git;a=commit;h=a004e72b95835136d3f1ea90517f706c24c03da7"
                        }
                    ]
                }
            },
            "impact": {
                "baseMetricV2": {
                    "cvssV2": {
                        "accessComplexity": "LOW",
                        "accessVector": "NETWORK",
                        "authentication": "NONE",
                        "availabilityImpact": "PARTIAL",
                        "baseScore": 7.5,
                        "confidentialityImpact": "PARTIAL",
                        "integrityImpact": "PARTIAL",
                        "vectorString": "AV:N/AC:L/Au:N/C:P/I:P/A:P",
                        "version": "2.0"
                    },
                    "exploitabilityScore": 10.0,
                    "impactScore": 6.4,
                    "obtainAllPrivilege": false,
                    "obtainOtherPrivilege": false,
                    "obtainUserPrivilege": false,
                    "severity": "HIGH",
                    "userInteractionRequired": false
                },
                "baseMetricV3": {
                    "cvssV3": {
                        "attackComplexity": "LOW",
                        "attackVector": "NETWORK",
                        "availabilityImpact": "HIGH",
                        "baseScore": 9.8,
                        "baseSeverity": "CRITICAL",
                        "confidentialityImpact": "HIGH",
                        "integrityImpact": "HIGH",
                        "privilegesRequired": "NONE",
                        "scope": "UNCHANGED",
                        "userInteraction": "NONE",
                        "vectorString": "CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
                        "version": "3.0"
                    },
                    "exploitabilityScore": 3.9,
                    "impactScore": 5.9
                }
            },
            "lastModifiedDate": "2019-12-27T16:08Z",
            "publishedDate": "2016-06-20T01:59Z"
        },
        "id": "CVE-2016-2177",
        "url": "https://nvd.nist.gov/vuln/detail/CVE-2016-2177"
    }
}

Snippet 및 하이라이팅 표시 가져오기

매치 결과에서 로컬 하이라이팅 또는 원격 하이라이팅 데이터를 가져와 CLI에서 하이라이팅하도록 할 수 있습니다. 먼저 다음 명령어를 사용하여 하이라이팅 정보를 추출합니다.

$ fossid-cli --vsf '/tmp/t1_lib.c' | head -1 | jq .snippet.local_highlight -rc

{"blocks":[{"byte_range":{"begin":39643,"end":39765},"char_range":{"begin":39643,"end":39765},"hash_range":{"begin":1017,"end":1022},"id":"12bff91f4092e0405ccbac07d92b155c"}],"encoding":"UTF-8","id":"37b03c7c0df744a1659a44cd06f6b0a3","pfm_format":2}

--highlight-input 명령줄 인수를 사용하여 fossid-cli에 대한 입력으로 하이라이팅 정보(위의 출력)를 사용합니다.

$ fossid-cli --highlight '/tmp/t1_lib.c' --highlight-input '{"blocks":[{"byte_range":{"begin":39643,"end":39765},"char_range":{"begin":39643,"end":39765},"hash_range":{"begin":1017,"end":1022},"id":"12bff91f4092e0405ccbac07d92b155c"}],"encoding":"UTF-8","id":"37b03c7c0df744a1659a44cd06f6b0a3","pfm_format":2}'

[   ]#ifndef OPENSSL_NO_NEXTPROTONEG
[   ]   s->s3->next_proto_neg_seen = 0;
[   ]#endif
[   ]
[   ]#ifndef OPENSSL_NO_HEARTBEATS
[   ]   s->tlsext_heartbeat &= ~(SSL_TLSEXT_HB_ENABLED |
[   ]                          SSL_TLSEXT_HB_DONT_SEND_REQUESTS);
[===]#endif
[===]
[===]   if (data >= (d+n-2))
[===]      goto ri_check;
[===]
[===]   n2s(data,length);
[===]   if (data+length != d+n)
[===]      {
[===]      *al = SSL_AD_DECODE_ERROR;
[   ]      return 0;
[   ]      }
[   ]
[   ]   while(data <= (d+n-4))
[   ]   {