Fort Knox만큼 안전: 해커로부터 웹사이트를 보호하는 방법
게시 됨: 2021-10-05이 기사에서는 웹 사이트가 해킹되어 불법 활동에 사용되지 않도록 보호하는 방법에 대한 가이드를 제공합니다.
온라인 안전은 인터넷의 무한한 푸른 하늘에 거대한 위험 신호입니다. 그리고 "온라인 안전"이라는 단어가 먼저 온라인 괴롭힘 및 사용자 보호를 떠올리게 할 수 있지만 웹사이트 보안의 부재가 비즈니스에 미칠 수 있는 피해도 상당합니다. 보안 지출을 줄인 웹사이트 소유자는 평판에 따라 비용을 지불하고 결과적으로 재정적 손실을 입습니다.
내용물:
- 모든 웹사이트 소유자가 보안에 투자해야 하는 이유
- 어떤 취약점에 대해 이야기하고 있습니까?
- 사출 결함
- 민감한 데이터 노출
- XSS(교차 사이트 스크립팅) 공격
- 깨진 인증
- 보안 구성 오류
- 손상된 액세스 제어
- 안전하지 않은 역직렬화
- 불충분한 로깅 및 모니터링
- XML 외부 엔티티(XXE)
- 알려진 취약점이 있는 구성 요소 사용
- 안전한 웹사이트를 만드는 방법
- 웹사이트를 보호하는 데 비용이 얼마나 드나요?
모든 웹사이트 소유자가 보안에 투자해야 하는 이유
일부 웹 사이트 소유자는 다음과 같은 생각을 가지고 있습니다. 내 웹 사이트에서 훔칠 것이 없습니다. 사용자 데이터나 결제 세부정보를 보관하지 않습니다. 나는 값비싼 최상급 보안이 필요하지 않습니다.
그러나 그것은 순진한 일입니다. 개인 또는 금융 데이터를 호스팅하지 않더라도 웹사이트가 해킹되는 데에는 여러 가지 이유가 있습니다. 다음은 보호되지 않는 서버에 대해 해커가 사용할 수 있는 목록입니다.
- 몸값을 요구합니다. 서버에 사용자 데이터를 보관하지 않더라도 해커가 데이터를 장악하고 이를 되찾기 위해 돈을 요구할 수 있습니다.
- SMTP(Simple Mail Transfer Protocol) 릴레이로 사용합니다. SMTP는 뉴스레터와 같이 이메일을 대량으로 배달하는 데 사용되는 프로토콜입니다. 해커는 서버를 사용하여 스팸이나 랜섬웨어를 보낼 수 있습니다.
- 비트코인 채굴하기.
- 봇넷의 일부로 DDoS 공격에 사용합니다.
- 웹사이트의 데이터를 변경하거나 삭제합니다. 그렇게 하려는 이유는 다를 수 있습니다.
그리고 그것은 단지 표면을 긁는 것입니다. 제3자(해커 및 기타 범죄자)가 제기하는 위협 외에도 웹사이트를 관리하는 직원의 실수로 인해 발생할 수 있는 위협도 있습니다. 사실 내부 보안은 외부만큼 중요합니다.
그렇다면 해커로부터 내 웹사이트를 어떻게 보호할 수 있습니까? 물어.
글쎄, 당신은 많은 취약점을 설명하고 처리해야합니다.
어떤 취약점에 대해 이야기하고 있습니까?
사이버 보안과 관련하여 업계에서 가장 평판이 좋은 기업 중 하나는 Open Web Application Security Project, 줄여서 OWASP입니다. OWASP 재단은 광범위한 웹 보안 문제 목록을 모니터링하고 정기적으로 업데이트합니다. 다음은 이 기사를 작성하는 날 현재 목록에 있는 일반적인 보안 문제(순서 없음)와 웹사이트의 위험을 줄이는 방법에 대한 몇 가지 팁입니다.
사출 결함
주입 결함은 데이터베이스와 관련이 있으며 잘못된 입력 유효성 검사로 인해 발생합니다. 시스템이 사용자 입력을 수락하지만 해당 입력을 적절하게 필터링하지 못하면 시스템이 취약해집니다. 해커는 이를 악용하여 시스템에 코드를 삽입할 수 있습니다(따라서 이름). 이 삽입된 코드로 인해 웹사이트가 의도하지 않은 명령을 수행하여 민감한 데이터를 표시하거나 웹사이트 제어권을 해커에게 넘겨줄 수 있습니다.
가장 인기 있는 주입 취약점 유형은 SQL 데이터베이스와 관련되지만 주입 취약점은 실제로 SQL 데이터베이스에 국한되지 않습니다. XPath 쿼리, LDAP 문 및 XML 스크립트도 삽입에 취약할 수 있습니다.
주입 결함으로부터 웹 사이트를 안전하게 만드는 방법은 무엇입니까? 두 가지 모범 사례에는 SQL 쿼리 삭제 및 매개 변수화된 쿼리 사용이 포함됩니다. 그렇게 할 수 있는 API가 있습니다.
이러한 것들을 손으로 구현하고 싶지 않다면 선호하는 프로그래밍 언어에 대해 ORM(객체 관계형 매핑) 도구를 사용할 수 있습니다. Rails 생태계와 밀접하게 연결되어 있기 때문에 ActiveRecord를 사용합니다.
위의 옵션 중 어느 것도 완전히 완벽하지는 않지만 요즘에는 견고한 보호에 가깝습니다.
민감한 데이터 노출
민감한 데이터는 다음과 같은 방식으로 사람을 착취하는 데 사용할 수 있는 모든 데이터입니다.
- 이름
- 사회 보장 번호
- 운전면허증 번호
- 신용 카드 정보
- 사용자 이름 및 암호
- 생일
- 건강 정보
- 결혼 전의 성
- 부모의 이름
은행 계좌와 같이 보안 질문에 대한 답변인 모든 정보가 포함될 수도 있습니다. 첫 번째 애완동물의 이름이 민감한 데이터로 간주될 수 있다고 누가 생각이나 했겠습니까?
민감한 데이터 노출로부터 웹사이트를 보호하는 것은 어렵습니다. 이러한 노출은 예측하고 감지하기 어렵기 때문입니다. 그러나 취할 수 있는 예방 조치 가 있습니다. 웹사이트에 저장된 민감한 데이터 는 절대 일반 텍스트로 저장해서는 안 됩니다 . 최신 기술로 암호화하고 보안 채널을 통해서만 전송해야 합니다.
웹사이트가 거래를 촉진하거나 일반적으로 민감한 데이터를 다루는 경우 SSL 암호화를 사용해야 합니다. 이것은 사용 가능한 최신 최고의 암호화 기술입니다. SSL 암호화를 사용하면 브라우저와 서버 또는 서버 간에 데이터를 안전하게 전송할 수 있습니다. 또한 많은 사용자가 웹 사이트 주소에서 HTTPS가 안전한지 확인하기 위해 찾고 있습니다. 해당 헤더는 SSL 인증서를 얻을 때 얻는 것입니다.
또한 일반적으로 클라우드에 데이터를 저장하는 것이 좋습니다. 그러나 단순히 클라우드에 저장하면 데이터가 자동으로 안전해질 것이라고 가정하지 마십시오. 그럼에도 불구하고 모든 보호 조치를 구현해야 하며 보안을 정기적으로 모니터링하고 업데이트해야 합니다.
XSS(교차 사이트 스크립팅) 공격
XSS 취약점은 해커가 네이티브가 아닌 코드를 주입하여 웹사이트 페이지에 영향을 줄 수 있다는 점에서 주입 결함과 유사합니다. XSS의 경우 JavaScript 주입에 대해 이야기하고 있습니다. 해커가 삽입한 JavaScript는 페이지 콘텐츠를 변경하고 악성 웹사이트에 대한 링크를 삽입하며 원래 은폐된 데이터를 해커에게 다시 보내 민감한 데이터가 노출될 수 있습니다.
Ruby on Rails 및 React에는 XSS 보호 기능이 내장되어 있습니다. XSS 방지 및 주입 방지 조치를 위한 또 다른 옵션은 Content-Security-Policy HTTP 응답 헤더를 사용하는 것입니다.
깨진 인증
원래 "깨진 인증 및 세션 관리"라고 불렸던 이 결함은 이름에서 알 수 있듯이 사용자 인증 및 세션 관리 중 취약성을 다룹니다. 여기에는 로그인 자격 증명 노출 및 세션 ID 관련 여러 문제가 포함됩니다.
- 약한 세션 ID
- URL에 표시되는 세션 ID
- 로그인 간에 변경되지 않는 세션 ID
- 보안되지 않은 연결을 통해 세션 ID 전송
세션 ID는 자격 증명과 마찬가지로 사용자의 ID와 직접 연결되므로 이를 가로채면 사용자 계정이 탈취될 수 있습니다. 이로 인해 재정 및 평판에서 건강 관련에 이르기까지 사용자에게 모든 종류의 피해가 발생합니다.
웹사이트를 인증 공격으로부터 안전하게 보호하려면 다단계 인증이 필요합니다.
Google은 이중 인증 옵션을 사용합니다 . 웹 브라우저에서 Google 계정을 열려면 먼저 비밀번호를 입력해야 합니다. 맞으면 휴대전화에서 Google 앱을 열고 웹 브라우저에 표시된 번호를 선택해야 합니다.
깨진 인증에 대한 보다 확실한 웹사이트 보호 방법은 다음과 같습니다.
- 암호 복잡성 적용 — "비밀번호는 최소 8자 이상이어야 하며 최소 하나의 숫자, 하나의 대문자 및 하나의 소문자를 포함해야 합니다."
- 계정이 일시 중지되기 전의 로그인 시도 제한 (특정 시간 동안 또는 사용자가 사이트 관리자에게 연락할 때까지) 및 관리자에게 경고
보안 구성 오류
보안 구성 오류는 데이터베이스, 네트워크, 서버, 프레임워크, 저장소 또는 기타 모든 단계와 웹 사이트의 모든 부분에서 발생할 수 있으므로 광범위한 주제입니다. 구성 취약점을 악용하여 시스템 기능에 액세스할 수 있습니다. 취약점이 있는 위치에 따라 이러한 액세스는 부분적이거나 완전할 수 있습니다. 잘못된 구성의 예:
- 기본 계정/비밀번호를 비활성화하지 않았습니다.
- 불필요하고 사용하지 않는 기능이 있습니다.
- 클라우드에 대한 액세스 권한이 안전하게 구성되지 않았습니다.
- 오류 메시지에는 사용자 이름, 비밀번호 또는 이메일 주소와 같은 민감한 정보가 표시됩니다.
잘못된 구성을 피하기 위해 가장 먼저 할 일은 기능, 샘플, 프레임워크 등 사용되지 않는 모든 것을 제거하는 것입니다. 다음 단계는 모든 환경에 대해 동일한 구성을 보장하고 정기적으로 성능을 확인하는 것입니다. 잘 생각한 아키텍처는 필수입니다.
손상된 액세스 제어
액세스 제어는 사용자가 할 수 있는 것과 할 수 없는 것을 제어하는 것입니다. 제대로 시행되지 않으면 사용자가 예측할 수 없는 방식으로 웹사이트에 영향을 줄 수 있는 작업을 수행할 수 있습니다. 손상된 액세스 제어를 악용하는 한 가지 방법은 다른 사용자의 프로필과 데이터를 보고 편집하는 것입니다. 다른 하나는 비용을 지불하거나 획득하지 않고 프리미엄 기능에 액세스하는 것입니다. 또 다른 하나는 관리자가 아닌 계정에서 관리자 페이지에 액세스하는 것입니다.
웹사이트의 액세스 제어가 작동하는지 확인하는 가장 좋은 방법은 수동 테스트입니다. 자동화된 테스트 도구는 액세스 제어가 의도한 대로 작동하는지 보장할 수 없습니다.
손상된 액세스 제어는 또한 제한된 API에 대한 액세스를 제공할 수 있는 CORS(원본 간 리소스 공유) 메커니즘의 남용으로 인해 발생할 수 있습니다. 이러한 이유로 CORS를 가능한 한 적게 사용하는 것이 좋습니다.
안전하지 않은 역직렬화
직렬화는 객체를 이진 코드로 변환하는 프로세스입니다. 역직렬화는 논리적으로 반대입니다. 둘 다 웹 개발에서 정기적으로 수행되는 프로세스이므로 공격에 사용하지 못하도록 보호를 구현하는 것이 중요합니다.
좋은 소식은 deserialization이 일반 사용자나 직원이 실수로 수행할 수 있는 작업이 아니라는 것입니다. 이는 부분적으로 나쁜 소식이기도 합니다. deserialization 공격은 항상 의도적이므로 악의적입니다. 또한 원격 코드 실행, 인증 없이 웹사이트 진입, DoS(서비스 거부) 공격 시작과 같은 가장 심각한 문제를 야기합니다.
이러한 유형의 공격으로부터 웹사이트를 보호하는 가장 쉬운 방법은 사용자 생성 직렬화된 개체를 금지하는 것입니다. 이것이 불가능하다면 다음으로 가장 좋은 방법은 무결성 검사를 위해 암호화 서명을 사용하는 것입니다.
JSON, YAML 또는 XML을 사용하면 이러한 형식이 바이너리가 아니기 때문에 해커가 역직렬화 취약점을 악용하기가 더 어려워질 수 있습니다.
불충분한 로깅 및 모니터링
이 취약점은 매우 명백해 보입니다. 웹사이트를 모니터링하지 않고 모든 오류를 기록하지 않고 로그인 시도 또는 액세스 제어 기능 실행에 실패한 경우 기본적으로 해커가 웹사이트를 공격하도록 유혹하는 것입니다. 디지털 전쟁이든 실제 전쟁이든 모든 유형의 전쟁에서 첫 번째 공격은 일반적으로 승리가 아니라 상대가 무엇인지 확인하는 것입니다. 그리고 쉬운 방법이 있으면 그것을 사용합니다. 이러한 조사를 기록하고 모니터링하지 않으면 시스템이 공격을 완전히 놓치거나 이미 발생하고 손상이 완료되면 이를 탐지하게 됩니다.
로깅은 사용자의 돈과 재정적 자격 증명을 다루기 때문에 전자 상거래 사이트에서 특히 중요합니다.
웹사이트를 보다 안전하게 만들려면 실패한 모든 시도를 올바르게 기록하고 이러한 로그가 로컬 서버 외부에 저장 및 백업되었는지 확인하십시오. 그러한 실패에 대해 자동 경고 시스템을 사용하고, 가능하면 그러한 실패를 지속적으로 생성하는 계정을 일시 중지합니다. 침해 가능성에 즉시 대응할 수 있도록 실시간 경고 시스템을 갖추는 것이 중요합니다.
XML 외부 엔티티(XXE)
우리는 이미 XML(Extensible Markup Language)에 대해 몇 번 언급했습니다. 그것은 사용하기 쉽고 널리 퍼진 유연한 언어입니다. XML 프로세서는 XML 문서에서 데이터를 구문 분석합니다. 웹 사이트가 XML 기반이고 유효성 검사 없이 XML 업로드를 허용하는 경우 공격에 취약할 수 있습니다.
웹사이트의 무결성을 보호하기 위해 다음과 같은 조치를 취하는 것이 좋습니다.
- DTD(문서 유형 정의) 처리를 비활성화합니다.
- XML 업로드를 제한하거나 방지하거나, 수행할 수 없는 경우 화이트리스팅(긍정적인 서버 측 입력 유효성 검사)을 시행합니다.
- XLM 프로세서와 라이브러리를 정기적으로 업그레이드하십시오.
- 민감한 데이터의 직렬화를 방지합니다.
- 해당되는 경우 JSON 또는 이와 유사한 단순 형식을 사용합니다.
- WAF(웹 애플리케이션 방화벽) 및 API 보안 게이트웨이를 구현합니다.
알려진 취약점이 있는 구성 요소 사용
완벽한 것은 없으며 소프트웨어에서 사용하는 모든 구성 요소에는 알려지거나 알려지지 않은 취약점이 있습니다. 발견되고 인식된 취약점에 대응하여 소프트웨어는 이러한 취약점을 커버하거나 악용으로 인해 발생할 수 있는 손상을 완화하도록 업데이트됩니다. 일부 약점은 경미한 피해를 입히지만 다른 약점은 비즈니스에 치명적일 수 있습니다.
알려진 취약점으로 인한 웹사이트 해킹을 방지하려면 정기적으로 업데이트를 확인하고 웹사이트에서 사용되는 모든 구성 요소를 업데이트하는 것이 중요합니다. 구성 요소가 많은 소프트웨어와 웹 사이트에서는 지루한 작업이 될 수 있습니다. 그렇기 때문에 보안 전문가는 불필요하고 사용하지 않는 라이브러리, 기능, 파일 및 기타 구성 요소를 정기적으로 확인하고 제거할 것을 권장합니다. 물론 공식 소스의 구성 요소만 사용합니다. 일반적으로 유료 소프트웨어를 무료로 배포하는 웹사이트에 현혹되지 마십시오. 웹사이트를 해킹하도록 수정할 수 있습니다.
안전한 웹사이트를 만드는 방법: 결론
모든 기술이 집약된 정보를 일반 용어로 표현하기 위해 보안 웹 사이트를 만들려는 경우 따라야 할 보안 팁은 다음과 같습니다.
- 신뢰할 수 있는 웹 호스트를 찾으세요.
- 웹사이트에서 사용되는 모든 소프트웨어, 프레임워크 및 라이브러리를 정기적으로 업데이트하십시오.
- 웹 사이트에서 불필요한 기능과 구성 요소를 제거하십시오.
- 브라우저와 서버 측 모두에서 입력을 검증하도록 시스템을 설정하십시오.
- 오류 메시지에 표시된 정보를 모니터링합니다.
- 사용자에 대한 암호 강도 검사기를 설정합니다.
- 서버와 관리 페이지에는 항상 강력한 암호를 사용하고 정기적으로 변경하십시오.
- SSL 인증서에 투자 / HTTPS 프로토콜을 사용하십시오.
- 실패 및 오류에 대한 적절한 로깅을 설정합니다.
- 감사 트랜잭션을 기록합니다(특히 전자상거래 웹사이트인 경우).
- 로그를 면밀히 모니터링합니다.
- 클라우드 서버를 사용하지만 그럼에도 불구하고 데이터를 보호하십시오.
- 항상 최신 기술을 사용하여 민감한 데이터를 암호화합니다.
- 보안 팀이 적시에 공격에 대응할 수 있도록 새로운 보안 업데이트와 새로운 위협을 주시하도록 하십시오.
웹사이트를 보호하는 데 비용이 얼마나 드나요?
이것은 확실한 답이 없는 질문입니다. 보안 비용은 사이트에서 사용하는 기술 스택 에 따라 크게 달라집니다. 또한 업데이트 비용은 업데이트해야 하는 구성 요소의 수, 업데이트 빈도 및 각 구성 요소의 업데이트 비용에 따라 달라집니다. 이러한 비용은 개발자가 개별적으로 계산해야 합니다.
개발 초기부터 보안을 고려하는 것이 좋습니다 . 보안 문제를 끝까지 미루면 사이트의 핵심에 변경 사항을 도입해야 할 수 있으며, 이는 처음부터 보안을 구축하는 것보다 훨씬 더 많은 비용이 들 수 있습니다.
결론
자신이 개발자이거나 개발 회사를 소유하고 있거나 사내 개발 팀이 있는 경우 이러한 모든 작업을 먼저 설정할 수 있습니다. 하지만 아직 기술 전문가가 없고 아웃소싱 제공업체와 함께 안전한 웹사이트를 만드는 방법을 알고 싶다면 웹사이트 구축은 물론 지원까지 할 수 있는 개발 회사를 찾는 것이 좋습니다. 모든 취약점을 예측하는 것은 거의 불가능하지만 모든 침해에 적시에 대응하는 능력은 최악의 상황에서 웹사이트를 구할 수 있습니다.
Mind Studios의 개발자는 최고의 보안 사례에 경험이 있으며 최신 트렌드를 따라갈 수 있습니다. 해커로부터 웹사이트를 보호하는 방법에 대해 질문이 있는 경우 무료 상담을 위해 저희에게 연락하십시오 .
Svitlana Varaksina 및 Artem Chervichnik 작성