• 【Rust日报】2022-09-09 攻击 Firecracker


    攻击 Firecracker

    来自 Grapl 的博客文章。在 Grapl,我们相信为了构建最好的防御系统,我们需要深入了解攻击者的行为。作为该目标的一部分,我们正在投资于进攻性安全研究。随时关注我们的博客,了解有关高风险漏洞、利用和高级威胁策略的新研究。

    这篇博客文章介绍了如何攻击 Firecracker 中的漏洞,Firecracker 是一种用 Rust 编程语言编写的开源微型虚拟机 (microVM) 监视器。它是为在 AWS Lambda 中使用而开发的,这是一种无服务器软件即服务 (SaaS) 应用程序托管服务。Firecracker 也用于 AWS 的类似 Fargate 服务,该服务提供了一种运行容器的方法,而无需管理服务器以进行容器编排。由于多租户引入的风险,Firecracker 在设计时具有安全意识。

    更多请看原文:https://www.graplsecurity.com/post/attacking-firecracker

    由 tokio 运行时引起的奇怪的内存泄漏

    这是 Reddit 上的一个讨论,发起者在代码中代码偶尔会在内存中删除并创建巨大的对象,并且发现它会有泄漏内存的现象。作者设法创建了一个具有类似内存问题的简单程序,如下:

    1. use std::sync::Arc;
    2. use std::time::Duration;
    3. use tokio::sync::Mutex;
    4. pub struct Object {
    5. pub a: Vec,
    6. pub b: Vec,
    7. pub c: u32,
    8. pub d: u32,
    9. pub e: u32,
    10. pub f: Option
    11. }
    12. #[allow(unused)]
    13. pub struct ObjectHolder {
    14. objects: Vec>
    15. }
    16. impl ObjectHolder {
    17. pub fn new() -> ObjectHolder {
    18. let mut res = vec![];
    19. for _ in 0..10_000_000 {
    20. res.push(Arc::new(Object {
    21. a: vec![12123, 123123, 12123, 12124, 1231512],
    22. b: vec![12423, 234, 2342],
    23. c: 423423,
    24. d: 123123,
    25. e: 12312,
    26. f: Some(392932)
    27. }))
    28. }
    29. return ObjectHolder {
    30. objects: res
    31. }
    32. }
    33. }
    34. pub struct Main {
    35. holder: Arc>
    36. }
    37. impl Main {
    38. pub fn new() -> Arc
      {
    39. return Arc::new(Main {
    40. holder: Arc::new(Mutex::new(ObjectHolder::new()))
    41. })
    42. }
    43. pub async fn build_objects(&self) {
    44. let mut holder = self.holder.lock().await;
    45. *holder = ObjectHolder::new();
    46. println!("BUILT NEW OBJECTS");
    47. }
    48. }
    49. #[tokio::main]
    50. async fn main() {
    51. let main = Main::new();
    52. let cnt_iter = 100;
    53. tokio::spawn(async move {
    54. for _ in 0..cnt_iter {
    55. println!("STARTIGN NEW CYCLE");
    56. main.build_objects().await;
    57. (0..100).for_each(|_| {
    58. tokio::spawn(async move {
    59. return Some(0)
    60. });
    61. });
    62. println!("WAITING 10 SECONDS");
    63. tokio::time::sleep(Duration::from_secs(10)).await;
    64. }
    65. }).await.unwrap();
    66. }

    参与讨论请看:https://www.reddit.com/r/rust/comments/x9bq8k/bizarre_memory_leak_caused_by_tokio_runtime/

    serde-numpy 项目

    serde-numpy 是一个用于将 JSON 直接反序列化为 numpy 数组的库,主要使用 rust 实现。

    项目地址:https://github.com/wnorcbrown/serde-numpy


    From 日报小组 @Jancd

    社区学习交流平台订阅:

    • Rust.cc论坛: 支持rss

    • 微信公众号:Rust语言学习交流

  • 相关阅读:
    【JAVA刷题初阶】刷爆力扣第九弹——二叉树
    vue2 系列:自定义 v-model
    如何用pycharm打开virtualenv、virtualenvwrapper、conda 创建环境
    JDBC知识点
    【云计算】虚拟私有云 VPC
    docker安装RabbitMQ和延时插件
    redis常用操作命令
    LeetCode98题:验证二叉搜索树(python3)
    java spring运行原理
    基于深度学习的图像去雨去雾
  • 原文地址:https://blog.csdn.net/u012067469/article/details/126792133