대량 할당 보호
Mass-assignment protection소프트웨어 프레임워크가 개발자의 삶을 더 쉽게 만드는 컴퓨팅 세계에서는 개발자가 의도하지 않은 문제가 있습니다.소프트웨어 프레임워크는 ORM(객체 관계 매핑) 도구 또는 활성 레코드 패턴을 사용하여 서로 다른 유형의 데이터를 변환합니다. 소프트웨어 프레임워크에 클래스의 필드(데이터 유형)를 보호하는 강력한 메커니즘이 없으면 공격자가 쉽게 악용할 수 있습니다.이러한 프레임워크를 통해 개발자는 매개 변수를 HTTP로 바인딩하고 외부에서 데이터를 조작할 수 있습니다.생성된 HTTP 요청은 응용 프로그램에서 개체를 만들거나 조작하는 데 사용되는 매개 변수를 전달합니다.
대량[1] 할당(mass assignment) 또는 오버포스팅(overposting)이라는 용어는 한 번에 여러 속성에 값을 할당하는 것을 말합니다.Ruby on Rails와 같은 프레임워크에서 사용할 수 있는 기능으로 수정된 URL을 사용하여 여러 개체 속성을 한 번에 수정할 수 있습니다.예를들면,
@사람 = 사람인.신규(유모차[:사람]) #params에는 이름, 이메일, isAdmin 및 연락처와 같은 여러 필드가 포함되어 있습니다. 이 대량 할당은 개발자가 각 값을 개별적으로 설정할 필요가 없기 때문에 상당한 양의 작업을 절약합니다.
위협
대량 할당에서 악의적인 에이전트는 다양한 방법으로 데이터를 공격하고 조작할 수 있습니다.태그를 전송하여 금지된 다양한 권한을 할당할 수 있습니다.예를 들어, 데이터베이스 스키마에는 해당 사용자가 admin인지 여부를 지정하는 필드 "admin"이 있는 테이블 "users"가 있습니다.악의적인 에이전트는 HTTP 요청을 통해 이 필드의 값을 서버로 쉽게 보내고 자신을 관리자로 표시할 수 있습니다.이를 대량 할당 취약성이라고 합니다.대량 할당을 사용하여 수행할 수 있는 보안 위반에 대해 설명합니다.
[2] GitHub은 2012년 대량 할당 기능을 악용하여 해킹을 당했습니다.깃허브를 공격한 호마코프는 자신의 SSH를 레일즈 깃허브 멤버 중 한 명의 SSH 키로 교체하여 레일즈에 대한 개인적인 접근 권한을 얻었습니다.
보호.
ASP.NET 코어
ASP.NET Core에서 다음을 사용합니다.Bind속성[3]
[HttpPost] 일반의 액션 결과 온 포스트( [바인딩("성", 이름 중간,고용 날짜")] 강사 강사) 루비
활성 레코드 모델을 몇 가지 변경하여 데이터를 보호할 수 있습니다.
- 사용 [4]방법: 보호해야 할 속성을 지정합니다.사용자가 대량 할당을 시도하면 대량 할당 보안 오류 및 특성 값이 변경되지 않는다는 오류 페이지가 표시됩니다.이를 블랙리스트라고도 합니다. 이 방법에서는 보호하려는 모든 속성을 추적하는 것이 어려울 때가 있습니다.예를 들어 아래 코드에서 assign_project 속성은 보호됩니다.이 방법은 여러 대량 할당 그룹을 정의할 수 있는 :as를 사용하는 역할 옵션을 선택적으로 사용합니다.역할 역할이 할당되지 않은 경우 이러한 특성은 :default 역할을 가집니다.다음은 assign_project가 관리자에게만 표시된다는 것을 보여주는 예입니다.
학급 사람인 < 활성 레코드::기초 has_many :filename 특성_보호된 :sys_project 끝.
특성_보호된 :sys_project, :as => :admin
- 사용 방법: 모든 사용자가 액세스할 수 있으며 보호할 필요가 없는 속성을 추가합니다.대량 할당할 수 있는 속성을 명시적으로 선택할 수 있으므로 관리하기가 더 쉽습니다.다른 모든 항목은 보호된 것으로 간주됩니다.이를 [5]화이트리스트라고 부르기도 합니다.
접근 가능한 :이름, : 이메일, : 연락처
- Sanitize 방법을 사용하는 방법대량 할당 문제를 방지하기 위해 할 수 있는 또 다른 구성은 대량 할당 소독기라고 합니다.이것은 [6]sanitize라고 불리는 방법입니다.이 방법은 들어오는 요청을 필터링하고 악의적인 태그가 없어야 합니다.사용자가 화이트리스트에 있는 태그만 허용합니다.구성인 경우
config.active_record.mass_assignment_sanitizer엄격하게 설정되면 상승합니다.ActiveModel::MassAssignmentSecurity::Error대량 할당이 의도한 대로 되지 않을 때. - Require 및 Permit 사용하기이러한 방법은 레일 4에서 사용됩니다.수신 요청 및 매개 변수를 확인하는 기능을 제공합니다.Require 메서드는 필요한 매개 변수가 모두 있는지 확인합니다.그렇지 않으면 오류가 발생합니다.Permit 메서드는 특정 매개 변수가 대량 할당에서 전달될 수 있는지 여부를 확인합니다.허용된 매개 변수 목록을 반환합니다.이를 강력한 매개 변수라고도 합니다.
때때로 개발자는 접근 가능한 속성을 추가하는 것을 잊어버릴 수 있습니다.이를 방지하기 위해 최신 버전의 Rail에는 구성 설정이 있습니다.config.active_record.whitelist_attributes = true이를 통해 빈 특성 화이트리스트를 만들고 대량 할당 취약성으로부터 보호합니다.모델은 여전히 액세스 가능한 매개 변수를 명시적으로 화이트리스트 또는 블랙리스트에 추가해야 합니다.
레퍼런스
- ^ "Ruby on Rails Security Guide — Ruby on Rails Guides". Guides.rubyonrails.org. Retrieved 2016-12-27.
- ^ Meyer, David (2012-03-05). "GitHub suspends member over 'mass-assignment' hack". ZDNet.com. Retrieved 2016-12-27.
- ^ "Model Binding in ASP.NET Core". learn.microsoft.com. Retrieved 6 February 2023.
- ^ "ActiveModel::MassAssignmentSecurity::ClassMethods". Api.rubyonrails.org. Retrieved 2016-12-27.
- ^ a b 오비 페르난데스, 케빈 파우스티노의 레일즈 4웨이
- ^ "Ruby on Rails Guides: Ruby On Rails Security Guide". Guides.rubyonrails.org. Retrieved 2016-12-27.