Hata ödüllerinin ardındaki matematik — Ödül tutarlarını hesaplamak için bir formül



EdOverflow, Tom Hudson

⚠️ Sorumluluk reddi beyanı (2022): Web sitemi Hugo’ya güncellediğimden beri, gömülü kod artık bu blog yazısında çalışmıyor. İçeriğin bir kısmı eksik olabilir.

Daniel Adams’ın çalışmalarından ilham alan, Tom Hudson ve bildirilen güvenlik açığının etkisine göre nihai ödül miktarını hesaplamak için bir formül hazırladım. Formül şu şekilde ifade edilebilir; burada $b$ ödül miktarıdır, $C$ CVSS puanıdır ve $N$ $b_{max}$ ile $C_{max}$ arasında doğrudan bir korelasyon oluşturan bir sabittir. :

$$\forall C (0 \le C \le 10) \tag{1}$$

$$\forall n (n \in \Bbb{R}^+ \land 1.0 \le n \le 3.0) \tag{2}$$

$$N = \frac{b_{max}}{(C_{max})^n} \tag{3}$$

$$b = N \times (C^n) \tag{4}$$

Sözde kodda bu şu şekilde ifade edilebilir:

// Input: b_max, C, and n
// Output: b

function formula(b_max, C, n)
    if C > 10 or C < 0 then
        return error
    else if n < 1 or n > 3 then
        return error
    else
        C_max := 10
        N := b_max / C_max^n
        b := N * C^n
        return b
    end if
end function

$C_{max}$ her zaman 10$’dır ve $b_{max}$ maksimum ödül miktarıdır. $b_{max}$ ve $n$, hata ödül programının genel amaçlar için tanımlaması gereken tek değişkenlerdir. $n$ pozitif gerçek sayılar kümesindedir ($\Bbb{R}^+$). $b_{max}$ değerini artırdıkça $n$ için daha düşük bir değer ayarlamanızı öneririz. Bu, 7,0 ila 10,0 CVSS puan aralığındaki değerler arasındaki farkın çok büyük olmamasını sağlamalıdır.

$1$’dan büyük bir $n$ üssü, aşağıdaki grafikte görüldüğü gibi bir üstel eğri oluşturur:

Şekil 1: b_{max} = 2000 için çizim grafiği

Bazı programlar, Niteliksel Önem Derecesi [1] ve kesin CVSS puanı değil. Bu, değerin her zaman karşılık gelen CVSS derecelendirmesinin maksimum puanına yuvarlanmasıyla kolaylıkla elde edilebilir.

$$ C = \begin{aligned} &0,0 &&\text{if } X < 0,1 \newline &3,9 && \text{if } 0,1 < X < 4,0 \newline &6,9 && \text{if } 3,9 < X < 7,0 \newline &7,9 && \text{if } 6,9 < X < 9,0 \newline &10,0 && \text{if } 8,9 < X \newline \end{aligned} \tag{5} $$

Örnek sistem olarak CVSS’yi kullandığımızı ve bu formülün herhangi bir güvenlik açığı puanlama sistemini kullanacak şekilde uyarlanabileceğini belirtmek önemlidir. Bununla birlikte, okuyucunun toplam ciddiyet puanını değerlendirirken CVSS sisteminin üç metrik grubunun tümünü kullandığını varsayıyoruz. [2] HackerOne gibi platformlar final puanını değerlendirirken üç grubu da kullanmıyor.


Bu, formülümüzü temel alan küçük bir hesap makinesidir. Aşağıdan farklı değerler vererek sonuçları inceleyebilirsiniz.








Bu formülle biraz uğraştıktan sonra, bunun böcek ödül endüstrisinin çeşitli alanlarında nasıl kullanılabileceğinin farkına vardık. Bu yazı, önerdiğimiz mekanizmayı kullanmanın potansiyel faydalarını vurgulamaktadır.

Şeffaflık

Hata ödül programları artık bu formülü güvenlik politikalarına yerleştirebilir ve çeşitli ödül miktarlarına nasıl ulaştıklarını açıkça ortaya koyabilir. Platformların bu sürece nasıl yardımcı olabileceğini daha ayrıntılı olarak açıklayacağız.

Kullanım kolaylığı

Önerilen formülümüzün kurulumu çok az adım gerektirir. Hata ödül programlarının yalnızca iki değişkeni, $b_{max}$ ve $n$ üssünü tanımlaması gerekir.

Sınırlama

Bu yaklaşım aynı zamanda programların eğriyi istenen herhangi bir noktada kapatmasına da olanak tanır. Örneğin HackerOne minimum 50$ ödül gerektiriyor. Yani eğer oran bunun altına düşmeye başlarsa, 50$’ın altındaki her şey kaldırılabilir.

Bu, hata ödül platformları tarafından nasıl uygulanabilir?

HackerOne şu anda bir program, bir raporun önceliklendirmesini yaptıktan sonra araştırmacı için bir ödül belirlemek istediğinde ödül miktarları öneriyor. Mevcut yaklaşımları istatistikseldir ve rekabetçi ödül miktarlarına odaklanmaktadır. Rakamlar, HackerOne platformundaki ilgili CVSS puanına ilişkin ortalama hata ödülü ödemelerine göre oluşturuldu.

Şekil 2: HackerOne'un ödül önerileri.
Şekil 2: HackerOne’un ödül önerileri.

Ödül miktarı şu anda üç kategoriye ayrılmıştır median, competitiveVe top. Bu değerleri $n$ üssüyle değiştirmenin mümkün olduğuna inanıyoruz. Başka bir deyişle, median kategori $n$ için $3$ değeri anlamına gelebilir ve top $n = 1$ olabilir. Üs, programın çeşitli CVSS puanlarının göreceli etkisine dayalı olarak bir ödül miktarını değerlendirmesine olanak tanır. Rekabetçi ödül miktarları sunmak isteyen daha olgun bir program, $n$ için daha düşük bir değer belirleyebilir; bu da bireysel ödül tutarları arasındaki farkın daha küçük olacağı anlamına gelir.

Ödeme sürecinde önerilen ödül tutarlarının yanı sıra, platformların, farklı CVSS puanlarına ilişkin tüm değerleri otomatik olarak bir tabloya ekleyen dahili bir hesaplayıcıya sahip olmalarını teşvik ediyoruz. Bu dinamik ve verimli yaklaşım, programların politikalarında hızla bir ödül tablosu oluşturmasını ve gelecekte bu tabloyu güncellemesini kolaylaştırır.

Bu tablonun yukarıdaki değerler kullanılarak dinamik olarak nasıl oluşturulduğuna dikkat edin.

Çözüm

Daha fazla programın ve platformun bu formülü benimsediğini görme umuduyla, hesap makinesinin kaynak kodu da dahil olmak üzere her şeyi GitHub’da açık kaynak olarak sunuyoruz. Depo burada yer almaktadır. Kamuoyunun her türlü katkısını ve geri bildirimini bekliyoruz.


Güncelleme (01 Aralık 2017 Cuma): @richinseattle $n$ için $2$’dan büyük değerlerin, yüksek ve kritik aralıktaki CVSS puanları arasında çok önemli boşluklar yarattığını fark ettiler. GitHub’da bu sorunu takip etmek için bir bildirim mevcut ve çok yakında bir çözüm bulmayı umuyoruz: https://github.com/EdOverflow/bounty-formula/issues/3.





Source link