作者档案:patrick.sullivan

Vger让你大胆地走…

你在一个敏捷团队工作吗?你很有可能是。无论你采用的是Scrum/看板/精益还是极限,你都是在尽可能少的阻力下完成工作。见鬼,如果你还在玩《Waterfall》,你就会关心这个问题。但你做得怎么样?你知道吗?这是开发人员或主管应该担心的事情吗?还是SEP?这是个刁钻的问题。如果您的团队被要求负责,并且他们的期望和您的交付之间存在差距,通过传递属性,您应该担心一些基本的精益度量。

在Bazaarvoice,我们是敏捷的,并且压倒性地利用看板。看板强调流程和持续改进的原则。为了对我们的改进做出数据驱动的决策,我们需要一种简单的方法来获取相关数据。仅通过JIRA和GitHub,访问正确的数据就有很大的进入障碍。

所以,像任何有进取心的工程师团队一样,我们为此开发了一个应用程序。

我们做了什么

我们中的一些人最近参加了一个优秀的精益指标预测研讨会专注目标公司的Troy Magennis.在他的培训中,他提出了展示精益指标象限的想法,以便为团队行为强制叙述,并避免过度使用单一指标。这真的引起了我的共鸣,似乎是我们想要构建的应用程序的一个很好的范例。

就这样,Vger诞生了。

我们使用了一个简单的象限视图,具有非常可书签的url参数。我们通过为团队提供一个界面来创建他们自己的“Vger团队”,并添加他们需要的任何“Vger板”,从而使团队的自助服务变得简单。从本质上讲,如果您可以创建一个JQL查询并在JIRA中为其提供一个板,Vger就可以为其绘制指标图。在显示中,我们通过让团队配置仪表板的日期范围、要显示的工作类型以及被视为工作/非工作的JIRA板列,提供了极大的灵活性。

现在,采用精益指标的门槛降低到了“你能不能打开浏览器”。不太寒酸。

象限视图

我们在象限视图中显示以下内容:

1.吞吐量-每周完成的票的数量。

2.变化——吞吐量的变化(标准偏差/平均值)。

3.积压增长-打开的票与关闭的票。

4.提前时间-完成票的提前时间。这也提供了一个详细的视图,通过Jira板列,看看你花了大部分时间在哪里。

我们Bazaarvoice是保守的赌徒,因此您将看到吞吐量和提前时间象限显示50%、80%和90%的可能性(与百分位数相反)。我们这样做是因为依赖平均水平或平均值对你不利。谁想掷硬币打赌?不是我们。我们希望自己十有八九是对的。

季度展望

后来,我们被要求按季度显示吞吐量,以帮助制定季度目标。我们为此创建了一个侧车页面。它按季度显示吞吐量:

我们还为交货时间建立了一个散点图,以便可以调查异常值:

该视图具有可缩放的区域,并且每个点都允许您单击到相应的JIRA票据。这很好。

但是等等!Git…

从第一天开始,我们选择为GitHub Pull Requests展示同一个象限。

注意,我们在PR Volume象限中显示了被拒绝和合并的行。我们还支持在PR和JIRA票据数据上叠加你的git标签。很甜!

我想做更多

Vger允许您从Quadrant和Quarterly视图下载吞吐量数据。您也可以从Quarterly视图中下载交货时间。这让团队和个人在这些非常有用的精益指标上执行他们自己的可视化和调查。

但是为什么呢?

Vger在构建时考虑了三个用例:

团队应该被告知

团队应该在他们的回顾中很容易获得这些关键的精益指标。我们建议他们从查看象限开始,看看他们是否同意复古主持人所呈现的叙述。他们还应该考虑他们所尝试的任何改进实验的结果。新的行为是否像他们希望的那样使吞吐量上升?新的行为是否会减少代码审查的时间?它是否减少了打开漏洞的数量?等。当然,并不是所有的复古都应该被无情的数据驱动,但它是持续改进文化的关键元素。

管理者应该了解这些数据,并与之交流

团队经理通常会谈论他们的团队是如何进步的。这些讨论应该是数据驱动的,最重要的是,它应该由团队可以访问的相同数据驱动(希望可以回溯到)。它还应该以一种仍然提供一些自定义的通用格式表示。注意:您应该避免在Vger或类似的可视化中比较团队。在大多数情况下,这种方式会导致徒劳、困惑和沮丧。

我们应该有数据来推动关于未来的数据驱动决策

然而,精益预测超出了本文的范围,特洛伊·马格尼斯对此有很好的见解我对这个问题的简单看法是:一个运行正常的团队,即使只有一点点运行时间,也不应该被问到“需要多长时间?”放弃低价值的例行公事,做高价值的分解工作,然后用历史数据进行预测。您可以方便地从电子表格中使用的Vger下载这些历史数据。我碰巧喜欢蒙特卡罗模拟我自己。

这不是看板吗?

您会注意到我自始至终都使用了术语“精益指标”。我想避免任何“看板vs scrum vs‘我们如何做事’”的下意识反应。无论您有意识地(或无意识地)为团队的工作流程使用什么方法,这些度量都适用。考虑到它是为功能开发团队构建的,但是当我们的客户实现团队作为早期采用者开始使用它时,我们取得了很好的成功。这使他们能够清楚地了解自己的交货时间细节,并找出等待客户执行某个操作的实际时间。

酷。我如何得到一个Vger?

我们在这里开源了请自便。这呈现为“它为我们工作”的软件,并没有像它可能的那样精细抛光,所以它有一些警告。这是一个非常简单的无服务器应用程序JIRA而且GitHub,所以目前只支持这些工具。如果你使用类似的,给Vger一试!

接下来是什么?

如果你很想投稿,这里有一些建议:

  • Vger的ETL流程真的需要更新了
  • 象限视图UI真的需要更新React来匹配季度视图
  • 使它对您所选择的问题跟踪器或源代码控制具有灵活性?
  • 如何添加一个漂亮的累积流程图?

我们要去的地方不需要路,但我们需要旗帜

在之前的博客文章中,我介绍了我们stripe-ctf-2-vm,一个自给自足的夺旗拼图梯子在一个vm。在这篇文章中,我想谈谈我们如何使用vm向Bazaarvoice的开发人员介绍安全思维。

研发的原则之一是负责任地用数据驱动的决策“快速失败,快速取胜”。是时候进行一个大实验了。我们穿上实验服,找来十几个志愿者参加测试培训。这个会议的格式是这样的:

  • 每个参与者都是孤独的竞争对手
  • 鼓励讨论以促进合作。
  • 每个谜题都是基于房间的感觉而设定的时间框。
  • 每个谜题/时间框都以讨论解决方案结束。

开始- 104

我们学到了什么,第一部分

游戏化学习很难。有一整个领域致力于此是有原因的。我们觉得自己通过提供越来越困难的挑战阶梯、竞争、社交互动和及时反馈而达到了目标。这个实验让我们做出了一些非常重要的调整。

  • 单独的竞争者无法有效合作,原因很明显。与会者应组成3人或4人的小团队,以获得更好的社交元素。考虑混合技术技能和/或功能团队。这真的很有帮助。
  • 我们需要在谜题的自由体验和挫败感之间找到平衡。密切跟踪时间并在表被翻转之前切入解决方案是个好主意。
  • 你还需要跟踪时间,这样你就可以对未来的培训课程应该持续多长时间做出有根据的猜测。
  • 对于新接触CTF或安全难题的人,需要监督和鼓励。当小型团队成立时,这更容易做到。
  • 每关奖励的奖励并不能激励玩家。

把它带到大联盟

凭借我们所学到的知识和一些与会者的推荐,我们向管理层提出了一种进一步发展的方法。现在,BV的研发管理非常支持学习,我们的副总裁非常重视安全。我们不需要卖为什么非常多,只是如何.由于这种教育被认为对我们工程工作的发展至关重要,我们提出了所有120多名工程师都需要接受培训的理由。我们提供了一个大约9次会议的计划,每次会议有大约20名工程师。一旦我们得到了管理层的支持,我们就向所有的工程人员进行了两分钟的电梯推销,以便他们了解接下来的会议邀请。

如果您在安全代码的价值方面与您的管理层没有融洽的关系,那么您将面临艰巨的工作。我们建议您利用自己的才能,通过代码审查、钢笔测试或模糊工具(如果您有技能的话)来定位一些安全漏洞。web应用程序漏洞最容易利用的是未经处理的输入、跨站点脚本和SQL注入。制作一份演示文稿,介绍越来越多的web应用漏洞,修复产品缺陷的成本,以及你刚刚在产品中发现缺陷的事实。支付外部钢笔测试或安全培训或安全工具可能很昂贵。利用您从演示中获得的优势来倡导一种自下而上的方法,如读书俱乐部或像CTF会议这样的培训,以培养可以为周围的工程师提供建议的安全专家。

tumblr_l9ofytzjp61qb7unno1_500

会话的模式

一旦你有一屋子的工程师准备好了他们的安全系统,你会怎么做?我们将他们分成几个小团队,尽可能地混合前端、后端和QA技能。接下来的30分钟左右用来帮助参与者设置他们的虚拟机并通过SSH登录。您将遇到的大多数问题可能来自与本地主机VBox适配器的混淆,或者试图直接从VBox UI而不是通过它们的终端和shell脚本运行和登录VM。当您的工程师登录到VM时,您就可以开始演示介绍幻灯片了。

当手指准备好开始拼图时,给每个人密码,并展示拼图0的演示幻灯片(0,因为我们是程序员)。设置谜题,然后让两支队伍全力以赴。提醒每个人在抢夺谜题时大声说出自己的想法是个好主意。并确保他们知道他们可以在VM或github repo中查看源代码(不,您可以在水平/ 0目录不是它的运行实例,所以不要修改它,并期望看到变化)。几分钟后,播放提示幻灯片。但是要了解你的听众。简单的谜题可能不需要提示,难的谜题可能需要更多的喘息空间,在提示出现之前或之后。

在你有一个赢家之后,或者更好的情况是,等到你有两个获胜的团队(你不想进展太快),展示解决方案和补救幻灯片,并讨论本可以避免漏洞的方法。任何可以用于支持补救讨论的特定于您的堆栈或技术的示例都将极大地加强讨论。一旦所有队伍都解锁了下一关,重复直到你用完时间或直到你解决了所有谜题。后者意味着你们是一群坏蛋。srs !

maxresdefault

走得越远越好,奖励攻克最多谜题的团队一些令人垂涎的东西:口袋妖怪人物。或钱。任何一个。

当然,你的里程非常重要,但我们发现以下时间安排对BV研发在我们三个小时的培训课程中是有效的:

ctf-timings

我们学到了什么,第二部分

以下是我们从9次会议中学到的东西:

  • 安排120多人参加3个小时的培训很难。留出管理时间来处理重新安排的请求,并计划一次补课。
  • 每次会话生成一个虚拟机,这样每次的战利品都不同。
  • 对于我们的工程师来说,三个小时的课程可以让学生们以小组的形式解决前5到6个谜题,这是对安全漏洞的一个很好的介绍。
  • 在会议邀请中向生成的虚拟机发送指令和链接。
  • 即便如此,也要计划花前30到40分钟设置vm。
  • 不要在邀请中发送ctf用户密码;一些聪明、积极的人会在会议前解决所有问题。如果他们这样做了,他们应该和你一起监考。
  • 如果你的公司使用HipChat、Slack或类似软件,那就在每次会议中设置一个仅限受邀者参加的房间。这有助于将解决方案剪切/粘贴到组中。
  • 别忘了在房间里工作,给予鼓励,改变兔子洞的方向。每个团队都是不同的,有些更喜欢独处。学着去感受并尊重它。
  • 有些工程师会纠结于难题的实现细节:“我不需要学习该死的PHP。”试着让他们明白谜题所造成的更大的脆弱性。试着引导他们思考安全缺陷(而不是特定于语言的缺陷)是如何在您公司的代码中发挥作用的。
  • 有些队伍会在解锁下一个关卡后继续前进。大多数时候,随着CTF的继续,这种情况会变得平衡。偶尔你会有一个安全意识很强的团队。如果他们继续前进,你可能需要得到他们的支持,让他们为了士气而远离与其他团队的直接竞争。也许他们可以帮助监考其他人?
  • 使用一些简单的东西,比如GoogleDoc表单,在每次会议结束后对参与者进行快速投票。您将获得关于如何更好地为您的组织定制此功能的宝贵反馈。

我们希望您能发现这种向您的工程组织介绍安全编码思维方式的独特方式既有用又有趣。这只是冰山一角。一旦您的工程师以这种方式思考,您将需要制定进一步的计划,以鼓励更多关于通用安全编码模式本身的教育。考虑定期检查安全编码代码,或者与团队中有经验的安全意识的人员进行结对编程。组建团队参加其他CTF比赛和内部安全漏洞奖励也可能有所帮助。如果你想要关于如何为自己实现这一点的提示,或者如果你只是想让我们知道它是如何为你工作的,请不要犹豫与我们联系。

啊,但是你有旗子吗?

嘿,你知道吗40%的数据泄露是由于web应用程序漏洞造成的?这意味着您的团队正在构建的软件很可能是获取数据的载体。还在怀疑吗?你应该谷歌哈特兰2008年泄密事件eBay的XSS漏洞,或时代华纳的密码泄露.我将等待。

做了什么?很可怕,不是吗?

很好,但是如何让开发人员考虑安全性呢?

针对应用程序漏洞对代码进行防弹的纪律被称为安全代码.你想要这种花哨的安全编码来提升你的AppSec游戏,但如果你的研发部门缺乏这方面的技能呢?你雇佣了聪明的人,他们可以学习,但他们需要有学习的意愿。他们需要感受它。那么,你如何让你的团队提高安全意识(除了告诉他们不要在便利贴上写密码之外)?

你要做的第一件事就是制作一份有十大安全漏洞的幻灯片,再加上一个时髦的背景,让他们仔细阅读。开发人员喜欢幻灯片。

嗯,没用。

要是有更好的办法,更吸引人的办法就好了。确实有。你是通过阅读Java来学习编码的吗?不可能。你开始编写代码示例是为了掌握它的窍门,对吗?也许你甚至得到了你的代码招式以心传心这样你就能激励自己了。为什么不同样培养一些安全意识的爱情呢?

0 p7ejqm

AppSec爱好者通常参加“夺旗”比赛。不,不是.不要么。有几种CTF格式,但危险的格式是最适合入门培训的需要。这种形式是由难度越来越大的谜题组成的阶梯。梯子是这样工作的:

  • 看看这个谜题,在这个例子中是一个有缺陷的web应用程序。由于我们对安全编码感兴趣,请查看应用程序的源代码。
  • 用你能扔的东西来对抗它。
  • 如果你成功地利用了应用程序中的漏洞,你应该让它交出进入下一关的钥匙。这就是所谓的战利品。
  • 使用上述战利品解锁下一关。
  • 泡沫。冲洗。重复这个过程,直到你成为第一个完成最后关卡的人。
  • 站在桌子上庆祝你的胜利

你可能会想,“这是个很好的建议,但我怎么才能参加CTF比赛呢?”我们也是这么想的。我们没有时间等待别人组织比赛,我们希望在一个更可控的环境中进行安全编码培训。怎么办呢?

我们做了什么

我们中的一些人参加过Stripe 2.0 CTF大约37.5个计算机年前(大约是4年前的人)。幸运的是,Stripe的优秀员工将这些网页应用谜题开源。是啊!但它们在github的死水里一直没有受到影响。嘘!

我们需要…

moar

在以古代版本管理的形式进行了一些勤奋的数字考古之后,我们复活了谜题。一旦我们有了谜题,我们就用veewee滚一个VirtualBox(VBox)兼容的虚拟机与一些脚本魔术自动生成战利品值。在这个VM中,每个谜题都被设置为远离临时用户的沙盒运行,但仍然允许他们访问源代码。

你怎么能做到呢?

yougetavm

如果您已经读到这里,您可能已经准备好向您的组织介绍一些基于ctf的培训。你可能还在想,“这很棒,但怎么做呢?我能得到一份CTFs吗?”不要再翻了,忠实的信徒。我们有开源的所有材料,你需要进行自己的CTF培训,就在这里的这个github:

https://github.com/bazaarvoice/stripe-ctf-2-vm

可以找到滚动虚拟机的说明在这里培训课程所需的幻灯片可以在这里找到在这里.就好像今天是你生日一样!

在下一篇文章中,我将解释我们如何围绕这个虚拟机开发一个介绍性的安全编码培训课程,并提供关于如何做到这一点的建议。现在,去拿旗子!